git lfs push が100%で止まって終わらない問題
TL;DR
前半は結果的に上手く行かなかったので、結論は追記の方参照されたし
試行錯誤
GitHubでリポジトリの統合(モノレポ化)の検証をしてて起きた事象。
以下のような状態から10時間以上経過しても終わらなかった。
$ git lfs push monorepo --all
Uploading LFS objects: 100% (10000/10000), 10 GB | 0 B/s
もしくは最後の1個が終わらないみたいな。
Uploading LFS objects: 100% (999/1000), 2.0 GB | 10 MB/s
調べた所、止まってるわけではなく、アップロード後に検証処理が走るようで オブジェクトやブランチ数が多い場合は時間がかかるがそれが極端に遅くなっているらしい? 書き込みによると数日かかったというものも。
Gitlfs push is stuck on "Uploading LFS objects:100...
こちらによると資格情報が影響してるとあった。 確かに複数アカウント使えるようにしたあたりくらいから問題が起きるようになった気はする。 モノレポ化で使わない方のアカウントを1回削除したら通るようになった。
が、再発したのでまだなにかありそう。 Git Credential Manager (GCM) からログアウトもしてみたり、Git Instance変えてみても起きる時は起きる。 ForkかPCか再起動で行けたり行けなかったりもしそう。
元のリポジトリがgit lfs fetch --allで404のファイルがあったため、そっちが原因の可能性も...?
謎は深まるばかり...
[2024/12/24 追記]
サンタからのプレゼント、謎はすべて解け...てないけど突破口は手にした。
モノレポ化で対象としているプロジェクトは結構特殊な状況らしく以下のようになっている。
- 今はProjectA、ProjectBというリポジトリに別れている
git lfs ls-files --allすると、どちらもProjectA、ProjectBをパスに含むLFSオブジェクトが出てくる- ついでに
git lfs fetch --allするとどちらも404を大量に吐く - おそらくもともと1つのリポジトリだった可能性が高い
- ブランチとかLFSオブジェクトとかも大量にある
突破口は以下の通り。
ProjectAの方でアップロードが止まってしまったら、一旦キャンセルする。 ProjectBの方でアップロードする。完遂したらまたProjectAの方で再実行する。
これでアップロードが完遂するようになった。はず。
何となく、404になってたLFSオブジェクトの参照が解決されるようになって走査する対象が少なくなったのかなと。
後は試してないけどこことかは気になった投稿。
Don't crawl history with git lfs push --all · Issue #4350 · git-lfs/git-lfs · GitHub