36

GitリポジトリにGerritを使用しています。数ヶ月間活動しているプロジェクトで、突然変更をプッシュできなくなりました。実行するgit pushと、次のエラーが表示されます。

error: unpack failed: error Missing tree 14d62f0ed4385e3f68f226ac133fa9932a9c65c9

git fsck --full利回りの実行:

dangling tree 2701c92fb6eab1826482f6bcc9598413e651a92a  
dangling blob c505b3b12cfacd1e26dec8dc559820a30fc20c27  
dangling blob 8907f94b5b4ec881e1b86d50681795e368c167ff  
dangling blob 4938d9fc34c6e2f92c68872bfec6e070b2b3a9c2  
dangling blob 8a5c8b8d35484ea1470e2d8e6c482fcb97b23d0f  
dangling commit 3072d3314e20bf6c6998e1c02986d83019d3e1df  
dangling tree 5377d7f7111d340854c3ee0946667c202227e603  
dangling tree c3783e9ab540457924ceb9f9fb5ea1c2b97472b1  
dangling blob 8b92d1765038e4ec5e721f98a2aabb305a7f9819  
dangling tree 38a03153f0f18ca15846e9bd4983a86800a43a94  
dangling commit 8db2d6ae5364174bebe13720a359ddb2e62d4c9d  

すべての開発者は、プッシュしようとすると同じエラーが発生します。これまで、gerritリポジトリ(git init --bare ...)を再初期化して、それをプッシュしてみました。また、別のリポジトリを使用して新しいgerritプロジェクトを作成しようとしました。結局、同じエラーが発生し続けます。

原因が何であるか、またはどのように回復するかについて誰かが何か洞察を持っていますか?

4

14 に答える 14

20

Tortiuse git でも同じエラーが発生します。最後に、このエラーの根本原因を突き止めました。

このエラーの原因となった手順。

  • head に新しいブランチを作成します。
  • 新しいブランチでいくつかの変更を行います
  • 誰かがヘッドブランチにも変更を加えます
  • ブランチをプッシュしてみてください

このエラーは、ローカル ブランチが作成され、ヘッド ブランチで何らかの変更が行われるまでプッシュされない場合に発生します。これは通常のことです。プッシュ アクションが実行されるまで、リモート ヘッド ブランチはローカル ブランチについて何も知らないためです。

このエラーを解決するには、ヘッド ブランチを完全なプル アクションに切り替えます。次に、ブランチを切り替えてプッシュを試みます。

于 2015-07-08T06:58:24.813 に答える
9

バックアップしてください...何かを試す前に、今すぐバックアップしてください。

さて、それは残念に聞こえます。また、定期的なバックアップがあるように聞こえないのも残念です。ただし、良いニュースがあります。開発者はこのファイルを持っているに違いありませんが、パック ファイルに含まれている可能性があります。他の誰かの .git ディレクトリで次のことを試してください。git はディレクトリ名にハッシュの最初の 2 文字を使用することに注意してください。

find . -name d62f0ed4385e3f68f226ac133fa9932a9c65c9

それが表示された場合は、そのファイルをサーバー上の同じ相対パスにコピーすると、問題なく進むはずです。そうでない場合は、これを試してください:

find . -name \*.idx -exec cat {} \; | git show-index | grep 14d62f0ed4385e3f68f226ac133fa9932a9c65c9

どのパック ファイルであるかは表示されませんが (これをすばやくスクリプト化するか、手動で行うことができます)、そこにあることがわかります。適切なパック ファイルを見つけて展開します...

git unpack-objects $FILE

そこから、ファイルをサーバー上の同じ相対パスにコピーします。それでも解決しない場合は、さらに作業が必要です。開発者の最新の十分なリポジトリを交換すると、問題が解決する場合があります。https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3Fを調べるか、更新コメントを投稿して、私がこれに戻るのを待つこともできます。

于 2011-08-29T22:52:36.540 に答える
4

を試してくださいgit pull --rebase

差分を保存しました(git show > ~/mychanges.txt、ファイルの上部にあるコミットメッセージを取り出しました)。新しいブランチ ( ) をチェックアウトしgit checkout -b newbranch、変更 ( )git apply ~/mychanges.txtを適用してから、 を実行しましたgit pull --rebase。その後、すべてが機能しました。

于 2013-05-22T15:17:56.433 に答える
0

技術的には、この回答は少し遅れていますが、私にとってうまくいったのは、プッシュしようとしていた変更セットのパッチを作成し、リポジトリを別のディスクの場所に再クローンし、パッチを適用し、再コミットして、プッシュすることでした。

于 2014-07-10T13:01:09.747 に答える
0

迅速な解決策は、フェッチ -> リベース -> コミットしてからプッシュすることです。

于 2015-02-25T11:50:27.090 に答える