克隆在很大的深度失败

时间:2013-07-20 16:07:41

标签: git git-clone

我无法克隆FFmpeg回购。用一个 binary search algorithm, 我想我在一个特定的深度范围内缩小了这个问题。注意结果不一致

$ git clone --depth 916 git://source.ffmpeg.org/ffmpeg
Cloning into 'ffmpeg'...
remote: Counting objects: 16737, done.
remote: Compressing objects: 100% (8454/8454), done.
remote: Total 16737 (delta 11293), reused 11481 (delta 8105)
Receiving objects: 100% (16737/16737), 11.32 MiB | 398.00 KiB/s, done.
Resolving deltas: 100% (11293/11293), done.
$ git clone --depth 916 git://source.ffmpeg.org/ffmpeg
Cloning into 'ffmpeg'...
remote: Counting objects: 16737, done.
remote: Compressing objects: 100% (8454/8454), done.
remote: Total 16737 (delta 11291), reused 11482 (delta 8105)
Receiving objects: 100% (16737/16737), 11.32 MiB | 390.00 KiB/s, done.
fatal: pack is corrupted (SHA1 mismatch)
fatal: index-pack failed
$ git clone --depth 916 git://source.ffmpeg.org/ffmpeg
Cloning into 'ffmpeg'...
remote: Counting objects: 16737, done.
remote: Compressing objects: 100% (8454/8454), done.
remote: Total 16737 (delta 11290), reused 11481 (delta 8105)
Receiving objects: 100% (16737/16737), 11.32 MiB | 401.00 KiB/s, done.
Resolving deltas: 100% (11290/11290), done.
fatal: missing blob object 'e893922133e1837d51077b07b6eb2ef3d5f269ec'
fatal: remote did not send all necessary objects
$ git clone --depth 916 git://source.ffmpeg.org/ffmpeg
Cloning into 'ffmpeg'...
remote: Counting objects: 16737, done.
remote: Compressing objects: 100% (8454/8454), done.
remote: Total 16737 (delta 11292), reused 11481 (delta 8105)
Receiving objects: 100% (16737/16737), 11.32 MiB | 394.00 KiB/s, done.
Resolving deltas: 100% (11292/11292), done.
Checking out files: 100% (3637/3637), done.

如何解决此问题,以便我可以在此深度克隆?

$ git --version
git version 1.8.3.1

2 个答案:

答案 0 :(得分:2)

在这种情况下,问题是由使用引起的 最新的Cygwin(1.7.21) 最新的Git来自Cygwin Ports(1.8.3.1)。

解决方法是使用 Adam Dinwoodie’s build

wget tastycake.net/~adam/cygwin/x86/git/git-1.8.5.2-1.tar.xz
tar -x -C / -f git-1.8.5.2-1.tar.xz

答案 1 :(得分:1)

这几个月一直让我烦恼,我刚刚找到了一个似乎对我有用的解决方法。

我注意到每次我从Cygwin下的源代码编译git并试图查看一个大的repo(带有1GB子模块的~1GB repo)时,我会在这个错误的几乎100%的时间内失败。但是,如果我使用Cygwin的setup.exe中的预编译git,它总是有效。即使我自己编译了相同的版本(1.7.9),我的编译也会失败并且编译工作正常。我在两个.exe文件上区分了一个objdump,唯一的区别是我的.exe使用了cygcrypto-1.0.0.dll,他们使用了cygcrypto-0.9.8.dll。

所以,我将cygcrypto-1.0.0.dll和symlinked cygcrypto-1.0.0.dll备份到0.9.8。我现在已经成功连续3次成功检出了repo和子模块(相比之前的100%失败率)。我不能保证这可以100%解决问题,但看起来非常有希望。

我假设您使用Git,那么您可能已经知道将新DLL版本符号链接到旧版本可能存在的问题。使用风险自负。

(如果有人回答如何让我的git构建直接链接到0.9.8,那么我不需要对DLL进行符号链接。我只使用cygwin for Git并且不太了解构建系统知道如何链接旧版本)