git pull失败,出现以下错误
remote: Counting objects: 146, done.
remote: fatal: unable to create thread: Resource temporarily unavailable
error: git upload-pack: git-pack-objects died with error.
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: protocol error: bad pack header
任何想法如何成功拉动?
答案 0 :(得分:50)
以remote
开头的行是从远程系统上运行的git输出的。错误:
fatal: unable to create thread: Resource temporarily unavailable
...强烈建议您在服务器上耗尽内存,如果您有以下情况,可能会发生这种情况:
ulimit
设置建议here是通过登录远程系统(作为git运行的用户)并执行以下操作来限制打包可能占用的内存量:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
答案 1 :(得分:1)
警告:如果您在Git 2.19.1中看到此错误,这是预料之中的,并记录在git-for-windows/git
issue 1839中:“ git gc
在计数对象的33%时崩溃”(这将报告两个都为APPCRASH git gc
,但{{1}的也是),因为“ git pack-objects”中使用了互斥锁,该互斥锁未正确初始化并导致“ git pull
”在Windows上转储内核。
如问题中所述:
它不仅影响
git repack
,而且影响更大。我也用gc
击中了它的一个变体:pull
此问题已在Git 2.20(Q4 2018)中修复。
请参见commit 34204c8的commit 9308f45,commit ce498e0,Johannes Schindelin (dscho
)(2018年10月16日)。
(由Junio C Hamano -- gitster
--在commit 620b00e中合并,2018年10月30日)
$ git pull remote: Enumerating objects: 3548, done. error: git upload-pack: git-pack-objects died with error. fatremote: aborting due to possible repository corruption on the remote side. al: git uploadf-pack: aborting due to possible repository corruption on the remote side. atal: protocol error: bad pack header
(mingw):在正确的位置初始化pack-objects
互斥锁在9ac3f0e(
packing_data
:解决打包大增量的性能问题中,2018-07-22,Git v2.19.0-rc1)中引入了互斥锁,用于保护对设置增量大小。该提交甚至添加了代码来对其进行初始化,但是在不正确的位置:在pack-objects
中,而对init_threaded_search()
(因此对oe_set_delta_size()
)的调用可能发生在调用链{{1 }} <-{packing_data_lock()
<-check_object()
<-get_object_details()
,这比prepare_pack()
函数调用cmd_pack_objects()
(初始化线程搜索)早了。 / p>另一个说明互斥锁已在不正确的地方初始化的故事是,用于初始化互斥锁的函数位于内建/中,而使用互斥锁的代码在
prepare_pack()
头文件中定义。
答案 2 :(得分:0)
更新:这个回答是Mark Longair回答的编辑建议,现在已经用正确的命名更新了他的答案。
事实上,pack.SizeLimit
不正确,它是pack.packSizeLimit
。
当我添加此选项时,它对我有用:)
我必须在本地和远程存储库中设置它。
答案 3 :(得分:0)
补充 @Mark Longair 的答案:
我必须运行以下命令来解决此问题:
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
git config --global pack.deltaCacheSize "512m"
您可以在git文档git config
中查看有关这些命令的更多信息。
答案 4 :(得分:-1)
我能够使用以下步骤解决此问题
步骤1.使用较小的深度进行克隆
git clone https://your_git_clone_url-深度3
步骤2。编辑.git / config并添加要开发的行。这是必需的,因为设置深度后,我无法切换除master以外的远程分支
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https:<your git clone url>
fetch = +refs/heads/master:refs/remotes/origin/master
fetch = +refs/heads/develop:refs/remotes/origin/develop <<--- Add this line
[branch "master"]
remote = origin
merge = refs/heads/master
[branch "develop"]
remote = origin
merge = refs/heads/develop
第3步:获取