I’m trying to unshallow a repository:
% /bin/git clone --shallow-since='3 years' 'https://github.com/RobertAudi/zsh-hooks'
Cloning into 'zsh-hooks'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 6), reused 12 (delta 4), pack-reused 0
Unpacking objects: 100% (17/17), 5.29 KiB | 1.76 MiB/s, done.
% cd zsh-hooks && git remote -v
origin https://github.com/RobertAudi/zsh-hooks (fetch)
origin ssh://github.com/RobertAudi/zsh-hooks (push)
% git fetch --unshallow origin
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
fatal: the remote end hung up unexpectedly
I have also tried changing the origin’s https to git and ssh, but no joy.
Setting:
git config http.postBuffer 524288000
Had no effect.
I only have 5 commits in my local repo, and trying to increase the depth also failed:
% git fetch --depth=10
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
Further debug info:
% GIT_TRACE_PACKET=1 GIT_TRACE=1 GIT_CURL_VERBOSE=1 /bin/git fetch --depth=10
12:35:07.106657 git.c:444 trace: built-in: git fetch --depth=10
12:35:07.212298 pkt-line.c:80 packet: fetch> git-upload-pack /RobertAudi/zsh-hookshost=github.com
12:35:07.802015 pkt-line.c:80 packet: fetch< 2a9f56433c86b332df367f6a350026e1e91035a6 HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want symref=HEAD:refs/heads/master filter agent=git/github-g8735eb3c5505
12:35:07.803152 pkt-line.c:80 packet: fetch< 75e97419cf96200cfcc4c186611f645158385dd2 refs/heads/installation-instructions
12:35:07.803162 pkt-line.c:80 packet: fetch< 2a9f56433c86b332df367f6a350026e1e91035a6 refs/heads/master
12:35:07.803166 pkt-line.c:80 packet: fetch< 0000
12:35:07.811717 pkt-line.c:80 packet: fetch> want 2a9f56433c86b332df367f6a350026e1e91035a6 multi_ack_detailed side-band-64k thin-pack include-tag ofs-delta deepen-since deepen-not agent=git/2.28.0
12:35:07.811740 pkt-line.c:80 packet: fetch> shallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
12:35:07.811747 pkt-line.c:80 packet: fetch> shallow f59eed49cafc1b986a593a153714d3896c194a65
12:35:07.811753 pkt-line.c:80 packet: fetch> deepen 10
12:35:07.811758 pkt-line.c:80 packet: fetch> 0000
12:35:08.108127 pkt-line.c:80 packet: fetch< shallow c047fc14746739e9f52cd20a71fc60cf31f63a42
12:35:08.108208 pkt-line.c:80 packet: fetch< unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
I’m using:
% /bin/git --version
git version 2.28.0
Я пытаюсь очистить репозиторий:
% /bin/git clone --shallow-since='3 years' 'https://github.com/RobertAudi/zsh-hooks'
Cloning into 'zsh-hooks'...
remote: Enumerating objects: 17, done.
remote: Counting objects: 100% (17/17), done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 17 (delta 6), reused 12 (delta 4), pack-reused 0
Unpacking objects: 100% (17/17), 5.29 KiB | 1.76 MiB/s, done.
% cd zsh-hooks && git remote -v
origin https://github.com/RobertAudi/zsh-hooks (fetch)
origin ssh://github.com/RobertAudi/zsh-hooks (push)
% git fetch --unshallow origin
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
fatal: the remote end hung up unexpectedly
Я также пытался изменить https источника на git и ssh, но безрезультатно.
Настройка:
git config http.postBuffer 524288000
Не имел никакого эффекта.
У меня всего 5 коммитов в моем локальном репо, и попытка увеличить глубину также не удалась:
% git fetch --depth=10
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
Дополнительная отладочная информация:
% GIT_TRACE_PACKET=1 GIT_TRACE=1 GIT_CURL_VERBOSE=1 /bin/git fetch --depth=10
12:35:07.106657 git.c:444 trace: built-in: git fetch --depth=10
12:35:07.212298 pkt-line.c:80 packet: fetch> git-upload-pack /RobertAudi/zsh-hookshost=github.com
12:35:07.802015 pkt-line.c:80 packet: fetch< 2a9f56433c86b332df367f6a350026e1e91035a6 HEADmulti_ack thin-pack side-band side-band-64k ofs-delta shallow deepen-since deepen-not deepen-relative no-progress include-tag multi_ack_detailed allow-tip-sha1-in-want allow-reachable-sha1-in-want symref=HEAD:refs/heads/master filter agent=git/github-g8735eb3c5505
12:35:07.803152 pkt-line.c:80 packet: fetch< 75e97419cf96200cfcc4c186611f645158385dd2 refs/heads/installation-instructions
12:35:07.803162 pkt-line.c:80 packet: fetch< 2a9f56433c86b332df367f6a350026e1e91035a6 refs/heads/master
12:35:07.803166 pkt-line.c:80 packet: fetch< 0000
12:35:07.811717 pkt-line.c:80 packet: fetch> want 2a9f56433c86b332df367f6a350026e1e91035a6 multi_ack_detailed side-band-64k thin-pack include-tag ofs-delta deepen-since deepen-not agent=git/2.28.0
12:35:07.811740 pkt-line.c:80 packet: fetch> shallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
12:35:07.811747 pkt-line.c:80 packet: fetch> shallow f59eed49cafc1b986a593a153714d3896c194a65
12:35:07.811753 pkt-line.c:80 packet: fetch> deepen 10
12:35:07.811758 pkt-line.c:80 packet: fetch> 0000
12:35:08.108127 pkt-line.c:80 packet: fetch< shallow c047fc14746739e9f52cd20a71fc60cf31f63a42
12:35:08.108208 pkt-line.c:80 packet: fetch< unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
fatal: error in object: unshallow 9301f4e3a16df8e7cf8f37b5b93a7b925d8c8bee
Я использую:
% /bin/git --version
git version 2.28.0
1 ответ
FWIW: я могу воспроизвести вашу проблему при клонировании этого репо.
Я запустил git repack -aldf (упомянутый в вопросе, который вы указали) один раз на своем клоне, и это заставило мою следующую работу git fetch --unshallow.
Немного возни: git repack -d было достаточно, чтобы решить проблему.
Я не понимаю всех последствий команды git repack, которую я выполнил; Я думаю, вы можете отправить эту конкретную проблему в список рассылки git.
6
LeGEC
14 Сен 2020 в 11:52
Обратите внимание, что мелкое репо (например, с git clone --depth 1 как способ преобразовать существующее репо в неглубокое) может потерпеть неудачу на git repack.
repack -ad: сократить список неглубоких коммитов
git repack может отбрасывать недостижимые коммиты без дополнительного предупреждения, делая соответствующие записи в .git/shallow недействительным, что вызывает серьезные проблемы при заглублении ветвей.
Один из сценариев, когда недостижимые коммиты отбрасываются git repack это когда git fetch --prune (или даже git fetch когда ссылка была принудительно нажата в то же время) может сделать фиксацию недостижимой, которая была достижима ранее.
Поэтому небезопасно предполагать, что git repack -adlf будет хранить недостижимые коммиты в одиночку (при условии, что они не были упакованы в первую очередь, что является предположением, по крайней мере, в некоторой части кода Git).
Это особенно важно иметь в виду при рассмотрении
.git/shallow файл: если какие-либо коммиты, перечисленные в этом файле, станут недоступными, это не проблема, но если они пропадут, это is проблема.
Одним из симптомов этой проблемы является то, что углубление выборки теперь может завершиться ошибкой:
fatal: error in object: unshallow <commit-hash>
Чтобы избежать этой проблемы, давайте сократим неглубокий список в git repack когда окно -d опция передается, если только -A также передается (что заставит теперь недоступные объекты превратиться в свободные объекты, а не удаляться).
Кроме того, нам также необходимо принять --keep-reachable и --unpack-unreachable=<date> в учетную запись.
Примечание: альтернативное решение, обсуждавшееся во время обзора этого патча, состояло в том, чтобы научить git fetch просто игнорировать записи в .git/shallow если соответствующие коммиты не существуют локально.
Однако беглый тест показал, что .git/shallow файл записывается во время мелкой клонировать, и в этом случае коммитов тоже не существует, а есть «мелкая» строка
делает нужно отправить.
Следовательно, этот подход будет намного более привередливым, чем подход, представленный в этом патче.
