所以我创建了一个不裸的远程仓库(因为我需要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而local是1.6.0.4
我尝试克隆我的本地副本repo,剥离.git文件夹并推送到新的repo,然后克隆新的repo并得到相同的错误,这让我相信它可能是一个文件rep导致git-upload-pack失败...
编辑: 我在repo中有很多windows二进制文件,因为我只是构建了python模块,然后将它们放在那里,所以其他人都不需要构建它们。如果我删除windows二进制文件并推送到一个新的repo,我可以再次克隆,也许这给了一个线索。试着准确缩小目前导致问题的文件。
答案 0 :(得分:21)
我解决这个问题的方法是:我的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守护程序的输出线程被阻塞时,则不会发生错误
答案 1 :(得分:14)
我和你有同样的问题;克隆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
一切正常。您还可以尝试向服务器添加更多交换空间。
答案 2 :(得分:12)
“git gc”会抱怨吗?
答案 3 :(得分:4)
我遇到了同样的问题。 我的猜测是,这与我使用text / CRLF模式创建文件的事实有关。 事实上,在将CygWin切换到UNIX /二进制换行模式后,一切正常。
请参阅:
none / cygdrive cygdrive text,posix = 0,user 0 0
到
none / cygdrive cygdrive binary,posix = 0,user 0 0
答案 4 :(得分:3)
我也遇到过cygwin git的问题,错误:fatal: index-pack failed
,
我能够通过为我的项目创建一个mount并将其设置为二进制模式来解决它。因为我的/c
设置为文字模式。
将cygwin添加到/etc/fstab
:
c:/work/Projects /projects some_fs binary 0 0
运行mount -a
以挂载所有驱动器。
您需要/projects
与cygwin git
合作,/c/work/Projects
才会失败。
不确定这是否适合您。
答案 5 :(得分:3)
使用GIT_TRACE
环境变量来获取调试输出。将其设置为“1”以跟踪stderr或跟踪到文件的绝对路径。
答案 6 :(得分:0)
我将客户端计算机的git源升级到服务器运行的相同版本,并为我修复了此问题。
答案 7 :(得分:0)
我遇到同样的问题,我会改变我的git配置,这样做很好:
git config --global pack.packSizeLimit 50m
git config --global pack.windowMemory 50m
git config --global core.compression 9
答案 8 :(得分:0)
git-daemon问题似乎已在v2.17.0中得到解决(已通过非工作版v2.16.2.1验证)。 即不再需要在控制台中选择文本以“锁定输出缓冲区”的解决方法。
来自https://github.com/git/git/blob/v2.17.0/Documentation/RelNotes/2.17.0.txt:
- 对“git守护程序”的各种修复。 (合并ed15e58efe jk / daemon-fixes稍后修复)。
答案 9 :(得分:0)
我有这个问题或接近这个问题,但是在任何这些线程中都看不到我的情况的解决方案。
就我而言,问题是防火墙。无论如何,克隆小型存储库都是可行的,但是大型存储库却失败了。因此,如果没有其他帮助,则值得检查防火墙设置。
答案 10 :(得分:0)
我遇到了这个问题,从github.com克隆了一个github存储库,在SLES 12 SP3上运行git 2.13。尝试将git升级到最新版本(当时为v2.21),但这不能解决问题。尝试建议设置git config选项以及许多其他选项,但是没有运气。
最终,我是手工完成的。
const object: MyCustomString = 'some value'
mkdir somedir
来设置GIT的目录。git init
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重新创建包/索引。
答案 11 :(得分:0)
就我而言,Windows Defender阻止了git对文件的访问,因为我已打开Ransomware Protection的“受控文件夹”访问权限。 添加git here (screenshot)以允许访问即可达到目的。
答案 12 :(得分:0)
这个错误可能会掩盖这些问题:
如果带有 git 的实例内存不足,那么您可以尝试添加一个交换临时:
fallocate -l 2G /swap
chmod 600 /swap
mkswap /swap
swapon /swap
完成后:
swapoff /swap
rm -f /swap
答案 13 :(得分:-1)
我通过修复文件夹权限解决了这个问题:
sudo chmod 777 -R Your_folder