我在谷歌上搜索过,找到了很多解决方案,但没有一个适合我。
我试图通过连接到LAN网络中的远程服务器从一台机器克隆。
在另一台机器上运行此命令会导致错误。
但是使用git运行相同的克隆命令://192.168.8.5…在服务器上,这是正常的并且成功的。
有什么想法吗?
user@USER ~
$ git clone -v git://192.168.8.5/butterfly025.git
Cloning into 'butterfly025'...
remote: Counting objects: 4846, done.
remote: Compressing objects: 100% (3256/3256), done.
fatal: read error: Invalid argument, 255.05 MiB | 1.35 MiB/s
fatal: early EOF
fatal: index-pack failed
我已经在.gitconfig中添加了这个配置,但也没有帮助。
使用git版本为1.8.5.5.2 .msysgit.0
[core]
compression = -1
我也有同样的问题。遵循上面的第一步,我能够克隆,但我不能做任何其他事情。不能取、拉或结帐旧树枝。
每个命令运行得比平时慢得多,然后在压缩对象后终止。
I:\dev [master +0 ~6 -0]> git fetch --unshallow
remote: Counting objects: 645483, done.
remote: Compressing objects: 100% (136865/136865), done.
error: RPC failed; result=18, HTTP code = 20082 MiB | 6.26 MiB/s
fatal: early EOF
fatal: The remote end hung up unexpectedly
fatal: index-pack failed
这也发生在你的裁判使用太多内存的时候。修剪记忆为我解决了这个问题。只要给你取回的东西加上一个限制,比如->
git fetch --depth=100
这将获取历史记录中最近100次编辑的文件。
在此之后,您可以以正常速度执行任何命令。
请注意,Git 2.13.x/2.14(2017年第三季度)确实引发了默认核心。影响git取回的packedGitLimit:
在较大的平台上,默认的package -git限制值已经提高(从8 GiB提高到32 GiB),以避免“gc”并行运行时“git获取”(可恢复的)失败。
参见David Turner (csusbdt)的commit be4ca29(2017年4月20日)。
帮助:Jeff King (peff)。
(由Junio C Hamano—gitster—在commit d97141b中合并,2017年5月16日)
Increase core.packedGitLimit
When core.packedGitLimit is exceeded, git will close packs.
If there is a repack operation going on in parallel with a fetch, the fetch
might open a pack, and then be forced to close it due to packedGitLimit being hit.
The repack could then delete the pack out from under the fetch, causing the fetch to fail.
Increase core.packedGitLimit's default value to prevent this.
On current 64-bit x86_64 machines, 48 bits of address space are available.
It appears that 64-bit ARM machines have no standard amount of address space (that is, it varies by manufacturer), and IA64 and POWER machines have the full 64 bits.
So 48 bits is the only limit that we can reasonably care about. We reserve a few bits of the 48-bit address space for the kernel's use (this is not strictly
necessary, but it's better to be safe), and use up to the remaining 45.
No git repository will be anywhere near this large any time soon, so this should prevent the failure.
正如@ingyhere所说:
浅克隆
首先,关闭压缩:
git config --global core.compression 0
接下来,让我们做一个部分克隆来截断下来的信息量:
git clone --depth 1 <repo_URI>
当它工作时,进入新目录并检索克隆的其余部分:
git fetch --unshallow
或者,或者,
git fetch --depth=2147483647
现在,拉一下:
git pull --all
然后解决你本地分支只跟踪主的问题
在您选择的编辑器中打开git配置文件(.git/config)
上面写着:
[remote "origin"]
url=<git repo url>
fetch = +refs/heads/master:refs/remotes/origin/master
换线
fetch = +refs/heads/master:refs/remotes/origin/master
to
fetch = +refs/heads/*:refs/remotes/origin/*
做一个git取回和git将拉你所有的远程分支现在
与此相关,仅在没有根访问权限并手动从RPM(使用rpm2cpio)或其他包(.deb, ..)中提取Git到子文件夹时有用。典型的用例:您尝试在公司服务器上使用更新版本的Git而不是过时版本的Git。
如果git克隆失败,导致fatal: index-pack失败,但没有早期的EOF提示,而是提示使用:git index-pack的帮助消息,说明版本不匹配,你需要使用——exec-path参数运行git:
git --exec-path=path/to/subfoldered/git/usr/bin/git clone <repo>
为了让这个过程自动发生,在~/.bashrc中指定:
export GIT_EXEC_PATH=path/to/subfoldered/git/usr/libexec
这是令人困惑的,因为Git日志可能会提示任何连接或ssh授权错误,例如:ssh_dispatch_run_fatal: connection to x.x.x.x port yy: message authentication code incorrect,远端意外挂起,早EOF。
服务器端解决方案
让我们在服务器端优化git存储库:
进入我的服务器的git裸库。
调用git gc。
调用git重新打包-A
Eg:
ssh admin@my_server_url.com
sudo su git
cd /home/git/my_repo_name # where my server's bare repository exists.
git gc
git repack -A
现在我能够克隆这个存储库没有错误,例如在客户端:
git clone git@my_server_url.com:my_repo_name
git gc命令可以在git客户端调用,以避免类似的git推送问题。
如果您是Gitlab服务的管理员,请手动触发Housekeeping。它在内部调用git gc或git repack。
客户端解决方案
其他(黑客,仅客户端)解决方案是下载没有历史记录的上一个master:
git clone --single-branch --depth=1 git@my_server_url.com:my_repo_name
有可能不会发生缓冲区溢出。
虽然不是完全相同的设置,但我在Ubuntu 20.04上挂载nfs共享时遇到了这个问题。我还没有找到任何解决方案,所以我分享了我是如何解决的,希望我能帮助到别人。
错误消息是(有时带有/没有警告):
warning: die() called many times. Recursion error or racy threaded death!
fatal: premature end of pack file, 29 bytes missing
fatal: premature end of pack file, 24 bytes missing
fatal: index-pack failed
Git浅克隆,禁用压缩等并没有解决这个问题。
当我用nfsvers=4.2而不是nfsvers=4.0挂载共享时,问题消失了。