Git LFS Migrate завершается с ошибкой "не удалось обновить ссылки: статус выхода 129" - PullRequest
0 голосов
/ 18 июня 2020

Я запускаю git lfs migrate на чистом --mirror клоне моего git репо, используя следующую команду:

git lfs migrate import --include=/path/to/[dir_to_convert_to_lfs]/** --everything

Результат:

$ git lfs migrate import --include=/path/to/[dir_to_convert_to_lfs]/** --everything
migrate: Sorting commits: ..., done.
migrate: Rewriting commits: 100% (22129/22129), done.
[branch abc -> xyz]
...
could not update refs: exit status 129

После этого кажется, что он испортил мое репо - например, если я затем позвоню:

git rev-list --all --count

, он показывает, что у меня теперь есть 42251 коммит - тогда как я ожидал, что git lfs migrate import обновит существующие коммиты, чтобы они указывали на файлы в LFS.

На данный момент я изо всех сил пытаюсь найти какую-либо информацию о том, что указывает это сообщение об ошибке и / или код состояния. Кроме того, нет журналов git lfs - то есть, если я вызываю git lfs журналы последними, он сообщает:

$ git lfs logs last
No logs to show

Я использую git версию 2.27.0 и git lfs версия 2.11.0.

Я что-то не так делаю с Git LFS Migrate? Есть ли способы отладить это?

Обновление: Я также добавил и закрыл проблему в репозитории git lfs на github для этого проблема.

1 Ответ

0 голосов
/ 19 июня 2020

Код ошибки - статус выхода 129:

Я был немного озадачен этим и не смог найти список кодов ошибок git lfs. Однако в OP этой проблемы git -lfs указано, что «129 указывает на ошибку использования». Признаюсь, это не оставило меня мудрее.

Решение:

Я обнаружил, что это очень похоже на эту git -lfs issue или, по крайней мере, связано с некоторые проблемы описаны в комментариях. Например, это похоже на проблему, описанную в этом комментарии или в этом комментарии .

Хотя первый из этих комментариев предоставляет более подробное решение для обновляя ссылки, я обнаружил, что сценарий, предложенный в решении comment , работал. С полной заслугой первоначального автора, я повторяю, что здесь:

Когда вы запускаете git lfs migrate import, запускаете с --object-map

git lfs migrate import --include=/path/to/[dir_to_convert_to_lfs]/** --everything --object-map=../mapping_file.txt

Затем следующий сценарий может быть выполнен в пределах репозиторий git:

MAP_FILE=../mapping_file.txt
git for-each-ref | grep tags | while read -r oid type tag; do
        while IFS=, read -r old_oid new_oid; do
                if [[ "$oid" == "$old_oid" ]]; then
                        echo TAG $tag still pointing to old_oid $old_oid instead of $new_oid
                        git tag -f $(basename $tag) $new_oid
                fi
        done < $MAP_FILE
done
...