10

私は20コミットバックについてのいくつかの行末の問題に苦労し、いくつかの奇妙なことが起こりました。今gitfsckは示しています:

Checking object directories 100% (256/256), done.
error in tree ee2060e71cb36d33be5ddc1fe9ca8d7dd0ab35cd: contains duplicate file entries
Checking objects: 100% (8633/8633), done.

およびgitshowee2060の表示:

File1.cs
File2.cs
File2.cs
File2.cs
File3.cs

これにより、リモコンにプッシュできなくなります。git pushは次のことを示しています:

error: unpack failed: index-pack abnormal exit
To https://github.com/username/Project.git
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'https://github.com/username/Project.git'

再梱包とガベージコレクションを試しました。この問題を解決するにはどうすればよいですか?

4

5 に答える 5

8
于 2012-07-21T00:29:28.243 に答える
5

私は最終的に次のようにしてリポジトリを修正しました

  1. 問題が発生する前のコミットのみを含むgithubから新しいクローンを作成します
  2. 混乱したリポジトリをファイルシステムから新しいクローンのリモートとして追加します
  3. 悪いリポジトリから新しいクローンの作業コピーへのコミットを入念にチェックしてください

    git checkout fe3254FIRSTCOMMITAFTERORIGIN/MASTER/HEAD . // note the dot at the end
    // without the dot, you move your head to the commit instead of the commit
    // to the working copy, and seems to bring the corrupt object into your good clone
    
  4. それぞれを順番にコミットし、他のリポジトリからコミットメッセージを手動でコピーします
  5. 破損したリポジトリをリモートから削除します
  6. ガベージコレクション+プルーン

    git gc --aggressive --prune=now
    
  7. git fsckが重複するファイルエントリを示さないので、喜んで泣きます
于 2012-06-08T17:29:25.970 に答える
2

私はこの同類の問題を抱えていました、そしてここと他のSOスレッドのすべての解決策は私のためにそれを修正することができませんでした。結局、私はBFGリポジトリクリーナーを使用して、不正なフォルダー名を参照するすべてのコミットを破棄しました。これはおそらくやり過ぎでしたが、リポジトリを正常に修復しました。

于 2016-05-25T10:28:11.317 に答える
1

問題のあるコミットの直前に新しいブランチをチェックアウトします。問題のあるコミットからファイルをチェックアウトします。次に、同じメッセージを使用してそれらを追加してコミットします(-Cオプションを使用)。残りのコミットについても繰り返します。完了したら、もう一方のブランチをリセットして、この正しいブランチを指すようにします。その後、プッシュできます。

于 2012-06-08T12:19:37.283 に答える
0

コミットを再度リベースすると、修正される可能性があります。それでも問題が解決しない場合は、git低レベルコマンド(git-cat-file)を使用して、この奇妙なツリーオブジェクトが含まれているコミットを確認し、重複のない正しいバージョンのツリーを再構築してください。ただし、これを修正できる自動ツールはわかりません。おそらく、すべてのツリーを変更し、奇妙なツリーにすでにリンクしているオブジェクトをコミットする必要があります。

ちなみに、git ls-tree ee2060そこで参照されているファイルなど、破損したツリーにあるデータの詳細を表示する必要があります。

于 2012-06-07T12:50:04.300 に答える