我正在尝试进行git pull,但是出现以下错误:
文件“lib/xxx.jar”的取消链接失败。 我应该重试吗?(y / n)
无论我选择y还是n,都不可能使我达到可以pull或push的状态。
ProcessExplorer
能够跟踪这种进程)git pull
。GIT_ASK_YESNO
变量 的替代方法。
2019年1月更新:
随着Git 2.21(2019年第一季度)的发布,"git gc
"和"git repack
"在删除不需要的打包文件之前没有关闭它们发现的打包文件,这在无法删除打开文件的平台上无法正常工作。
这已得到纠正。
请参见commit 5bdece0(2018年12月15日),作者为Johannes Schindelin (dscho
)。
(由Junio C Hamano -- gitster
--合并于commit 5104f8f,2019年1月18日)
gc
/repack
: 在需要时释放包在Windows上,如果进程仍然持有文件的句柄,则无法删除或重命名文件。
为了解决这个问题,我们引入了close_all_packs()
函数。之前,我们确保在生成
git gc
之前释放包,以防gc
想要删除不再需要的包。但是这位开发人员忘记了
gc
本身也需要释放包,例如通过--aggressive
选项合并所有包时。同样地,
git repack -d
想要删除过时的包,因此也需要关闭所有包句柄。
更新于2016年1月
这应该在Git 2.8中得到解决(即2016年3月)(请参见下文的Git 2.19,2018年第三季度)
查看commit d562102, commit dcacb1b, commit df617b5, commit 0898c96(2016年1月13日)由Johannes Schindelin (dscho
)提交。
(由Junio C Hamano -- gitster
--在commit 3c80940中合并,2016年1月26日)
fetch
: 在垃圾回收之前释放包文件在自动垃圾回收之前,我们需要确保包文件已被释放,以防需要重新打包和回收垃圾。
许多在退出前运行 "gc --auto
" 的代码路径仍然将包文件映射并保持对它们的文件描述符打开,这不利于无法删除已打开文件的系统。
现在在执行之前关闭包文件。
这修复了git-for-widows
问题500。
通过查看用于验证新方法的测试, 可能的解决方法(由于 Git 2.8 还未发布)是人为提高 gc.autoPackLimit
。
git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
git 2.8.4 (2016年6月)提到了issue 755,这也应该可以缓解此问题(commit 2db0641):
确保临时文件句柄不会被子进程继承
git-for-windows
问题500 已经在Git 2.19,2018年第三季度中得到解决。.idx
and .pack
failed (The only process owned handle to this file is git.exe
)"。这是一个与Windows相关的答案,所以我知道它与您无关... 我只是包括它是为了未来搜索者的好处。
在我的情况下,原因是我从非提升的命令行中运行Git。 "以管理员身份运行"将其修复了。
我的问题是Visual Studio试图重新加载从pull中更改的所有文件。请让Visual Studio刷新,然后运行git gc
。
git gc
命令时,我在shell中遇到了类似的错误:Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)
以上答案对我都没有用,但我使用了带有force选项的git gc命令,解决了我的问题。
'git gc --force'
[Windows 7, 以管理员身份运行 => 命令提示符]
尝试重新启动您的Apache或其他Web服务器,因为它可能已锁定您的某些文件。
git pull
命令。这样就可以了。
chmod
和/或chown
。 - Not_a_Golfer