首页 > 解决方案 > Git LFS 迁移失败并显示“无法更新参考:退出状态 129”

问题描述

我正在使用以下命令在我的 git repogit lfs migrate的干净克隆上运行:--mirror

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 做错了吗?有没有办法调试这个?

更新: 我还在github 上的 git lfs repo 上为这个问题添加并关闭了一个问题

标签: gitgit-lfsgit-lfs-migrate

解决方案


错误代码 - 退出状态 129:

我对此有点困惑,找不到 git lfs 错误代码列表。但是,此git-lfs 问题的 OP指出“129 表示使用错误”。我承认这让我一点也不聪明。

解决方案:

我发现这与这个git-lfs 问题非常相似,或者至少与评论中描述的一些问题有关。例如,它似乎与此评论或此评论中描述的问题相似。

尽管这些评论中的第一个提供了更新参考的更详细的解决方案,但我发现评论解决方案中提供的脚本能够工作。感谢原作者,我在这里重复一遍:

当你运行时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

推荐阅读