web-dev-qa-db-ja.com

git cloneは「index-pack」に失敗して失敗しますか?

そこで、私はnot bareのリモートリポジトリを作成し(それを読み取るにはredmineが必要なため)、グループと共有するように設定されています(したがって、git init --shared = group)。リモートリポジトリにプッシュすることができましたが、クローンを作成しようとしています。

ネット上で複製すると、次のようになります:

remote: Counting objects: 4648, done.
remote: Compressing objects: 100% (2837/2837), done.
error: git-upload-pack: git-pack-objects died with error.B/s  
fatal: git-upload-pack: aborting due to possible repository corruption on the remote side.
remote: aborting due to possible repository corruption on the remote side.
fatal: early EOF
fatal: index-pack failed

私は問題なくローカルでクローンを作成でき、「git fsck」を実行しましたが、これは問題ではないと理解しているいくつかのぶら下がり木/ blobのみを報告します。これは何が原因ですか?私はまだクローンからではなく、そこからプルすることができます。リモートgitバージョンが1.5.6.5であるのに対し、ローカルは1.6.0.4であることに注意してください。

リポジトリのローカルコピーのクローンを作成し、.gitフォルダーを削除して新しいリポジトリにプッシュしてから、新しいリポジトリのクローンを作成しようとすると、同じエラーが発生します。失敗するgit-upload-pack ...

編集:pythonモジュールをビルドし、そこに固定しただけなので、他の人も同様にビルドする必要はありませんでした。 Windowsのバイナリを削除し、新しいリポジトリにプッシュすると、再びクローンを作成できますが、おそらくそれが手がかりになります。

48
gct

この問題を解決した方法は次のとおりです。私のgitデーモンはWindows上で実行され、クライアントは他のコンピューター上にあります。

回避策を見つけました(ただし、Windowsでのみ機能します)。

Cmd.exeをより冗長でgitのデーモンを起動します。

"C:\Program Files\Git\bin\sh.exe" --login -i -c 'git.exe daemon --verbose  '

それはgitのbashで直接動作するかどうか、テストしていません。多分それはなります。

次に、(クローン、プル、フェッチなどを開始する前に)ウィンドウでテキストを選択します(注:「クイック編集モード」を有効にする必要があります(cmd.exeで見つけることができます->プロパティ(左上をクリックします) cmdウィンドウの隅)->編集オプション)))でgitデーモンを実行します。それは、そのウィンドウ内の任意の更なるメッセージを印刷するのを防ぐことができます。

Gitデーモンの出力スレッドがそのようにブロックされている場合、エラーは発生しません

21
Martin

私はあなたと同じ問題を抱えています。 iを複製するときのエラーメッセージ:

Cloning into test...
remote: Counting objects: 6503, done.
remote: Compressing objects: 100% (4519/4519), done.
Connection to git.myhost.im closed by remote Host.| 350 KiB/s
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

私の場合、その理由は、リポジトリのサイズ(200M)がgitサーバーのメモリ(128M)よりも大きいためです。 gitサーバーからクローンを作成するとき、サーバーでコマンドtopを使用します。これは、メモリ使用量がすぐに128Mを超えていることを示しています。

4Gメモリを備えた別のサーバーを使用すると、git cloneは大丈夫です。サーバーにスワップ領域を追加することもできます。

14
andywu

「git gc」は文句を言いますか?

12
Yann Ramin

同じ問題がありました。私の推測では、また、これは私が作成したファイルのテキスト/ CRLFモードを使用しているという事実に関係しているということでした。そして実際、UNIX /バイナリ改行モードにCygwinを切り替えた後、すべてが正常に動作します。

見る:

ところで、ファイルモードを切り替えるには私のための最も簡単な方法は、からスイッチに/ etc/fstabを編集しました

なし/ cygdriveのcygdriveのテキスト、POSIX = 0、ユーザー0 0

なし/ cygdriveのcygdriveのバイナリ、POSIX = 0、ユーザ0

4

また、cygwin gitで問題が発生しました。エラー:fatal: index-pack failed

プロジェクト用のマウントを作成し、それをバイナリモードに設定することで解決できました。 /cがテキストモードに設定されているためです。

/etc/fstabにcygwinを追加:

c:/work/Projects /projects some_fs binary 0 0

mount -aを実行して、すべてのドライブをマウントします。

Cygwinを使用するには/projectsにいる必要がありますgit/c/work/Projectsは失敗します。

これがあなたのために働くかどうかわからない。

3
mpmeyer

つかいます GIT_TRACEデバッグ出力を取得するための環境変数。 「1」に設定してstderrにトレースするか、ファイルにトレースする絶対パスに設定します。

3
ivan_pozdeev

私はこの問題を抱えていたか、それに近い状態でしたが、これらのスレッドのいずれにおいても私のケースの解決策が見つかりませんでした。

私の場合、問題はファイアウォールでした。とにかく小さなリポジトリのクローンは機能しましたが、大きなリポジトリは失敗しました。したがって、他に何も役に立たない場合は、ファイアウォール設定を確認する価値があります。

0
Lasse Lindqvist

クライアントコンピューターのgitソースをサーバーが実行しているのと同じバージョンにアップグレードしましたが、これで修正されました。

0
Jim Geurts

SLES 12 SP3でgit 2.13を実行し、github.comからgithubリポジトリを複製して、この問題に遭遇しました。 gitを最新(当時はv2.21)にアップグレードしようとしましたが、問題は解決しませんでした。提案されたgit configオプション、および他の多くのオプションの設定を試みましたが、運はありませんでした。

最終的に、私は手でやった。

  • ディレクトリを手動で作成しました。mkdir somedir
  • ランgit init GIT用のディレクトリを設定します。
  • 手動でgithubリポジトリをOrigin git remote add Origin http://github.com/git/git
  • ランgit fetchパックを取得します。このタスクはエラーで失敗しましたが、.git/objects/pack/tmp_pack_XXXXXX
  • 中古 cat .git/objects/pack/tmp_pack_XXXXXX | git unpack-objects -rすべての有効なオブジェクトを抽出します。
  • ランgit fetchを繰り返して、以前の試みで見逃したもの(ブランチやタグなど)を取得します。それらはすべてアンパックされているため、パック/オブジェクトは必要ありません。
  • 最後に、 git checkout master、何か実物を指すHEADを取得します。

私に必要なのかはわかりませんが、お勧めしますgit fsckおよびgit gcその後、gitをトリガーしてパック/インデックスを再作成します。

0
davenpcj

Git-daemonの問題は v2.17. で解決されたようです(v2.16.2.1が機能していないことで検証済み)。つまり「出力バッファをロックする」ためにコンソールでテキストを選択する回避策はもう必要ありません。

https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt

  • 「gitデーモン」の各種修正。 (ed15e58efe jk/daemon-fixesを後でmaintにマージします)。
0
GreenMoose

私は同じ問題を抱えているので、git configsを変更するとうまくいきます:

git config --global pack.packSizeLimit 50m
git config --global pack.windowMemory 50m
git config --global core.compression 9

0