我正在尝试做一个git pull,我收到以下错误:
取消链接文件'lib / xxx.jar'失败。我应该再试一次吗? (Y / N)
无论我选择y还是n,都无法进入我可以拉动或推动的状态。
答案 0 :(得分:199)
这通常意味着一个进程仍在使用该特定文件(仍然有一个句柄)
(在Windows上,ProcessExplorer
擅长跟踪此类流程)
尝试关闭其他程序,然后重试git pull
。
请注意,您可以选择GIT_ASK_YESNO
variable。
2019年1月更新:
这应该更加固定,使用Git 2.21(2019年第一季度),因为“git gc
”和“git repack
”没有关闭他们在删除之前发现不需要的打开包文件,这没有在无法删除打开文件的平台上工作
这已经得到纠正。
commit 5bdece0见Johannes Schindelin (dscho
)(2018年12月15日)
(由Junio C Hamano -- gitster
--合并于commit 5104f8f,2019年1月18日)
gc
/repack
:在需要时发布包在Windows上,如果进程仍有句柄,则无法删除文件或重命名文件 为了解决这个问题,我们引入了
close_all_packs()
函数。之前,我们确保在
git gc
生成gc
之前发布包,以防gc
想要删除不再需要的包。但是这位开发人员忘记了
--aggressive
本身也需要放弃包装,例如通过git repack -d
选项整合所有包时。同样,
fetch
想要删除过时的包,因此也需要关闭所有的包句柄。
2016年1月更新
这应该在Git 2。8(2016年3月)中修复(见下面的Git 2.19,Q3 2018)
commit d562102见commit dcacb1b,commit df617b5,commit 0898c96,Johannes Schindelin (dscho
)(2016年1月13日)。{
(Junio C Hamano -- gitster
--于2016年1月26日commit 3c80940合并)
gc --auto
:在垃圾收集之前发布包文件在auto-gc'ing之前,我们需要确保在需要重新打包和垃圾收集的情况下发布包文件。
许多在退出之前运行“
gc.autoPackLimit
”的代码路径会保留打包的文件并将文件描述符保留为打开状态,这对于无法删除打开的文件的系统不友好。
他们现在关闭包装。
查看test used to validate that new approach,可能的解决方法(因为Git 2.8还没有出来)将是人为提升git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value
。
{{1}}
git 2.8.4 (June 2016)确实提到issue 755,这也应该缓解这个问题(commit 2db0641):
确保子进程不继承临时文件句柄
实际上,上面提到的git-for-windows
issue 500确实是用Git 2.19,Q3 2018修复的
请参阅“Git - Unlink of file .idx
and .pack
failed (The only process owned handle to this file is git.exe
)”
答案 1 :(得分:54)
这是一个Windows特定的答案,所以我知道它与你无关......我只是为了未来的搜索者的利益而包含它。
在我的情况下,这是因为我从一个非提升的命令行运行Git。 “以管理员身份运行”为我修好了。
答案 2 :(得分:26)
对我来说,这是因为Visual Studio试图从拉动中重新加载所有已更改的文件。让visual studio刷新,然后运行git gc
。
答案 3 :(得分:5)
在使用GitHub for Windows的Windows上,运行git gc
时shell中出现类似错误:
Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)
我通过关闭GitHub GUI解决了这个问题。
答案 4 :(得分:2)
尝试重新启动Apache或其他Web服务器,因为它可能锁定了您的某些文件。
答案 5 :(得分:2)
关闭Visual Studio和Rubymine并且没有再次收到错误。其中一个是罪魁祸首。
答案 6 :(得分:2)
关闭IDE然后执行git pull
。它会工作。
答案 7 :(得分:1)
这是我的案例中由LESS编译器SimpLESS引起的。你必须在系统托盘中关闭它。
答案 8 :(得分:0)
我遇到了同样的错误,并通过关闭Eclipse并在使用文件时再次拉动来解决了该错误。
答案 9 :(得分:0)
在我的情况下,我有一种古老的方法来修剪导致问题的标签。我通过取消原始设置来解决它:
git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'
然后将其添加到服务器上已删除的分支中:
git config --global fetch.pruneTags true
答案 10 :(得分:0)
尝试在管理模式下运行命令行编辑器并运行命令。它可以帮助解决问题。 :)
答案 11 :(得分:0)
以上所有答案均不适合我,但我使用force选项运行git gc命令,就解决了我的情况。
'git gc --force'
[Windows 7,以管理员身份运行=>命令提示符]
答案 12 :(得分:0)
我遇到了同样的问题,我从Window Task Manager关闭了所有相关程序。但是,它仍然无法正常工作。 有趣的是我跑了" Git rebase"而不是" Git pull"它有效!
答案 13 :(得分:0)
我打开了PHPStorm,关闭了,一切都很顺利。
答案 14 :(得分:0)
我在Windows XP上发生过这种情况,这些消息都被卡在循环中,并且可以通过回复来清除。
关闭Git-GUI可以清除卡住的循环事件。 (我在bash shell中运行git merge -i。)
其他事件的发生可能是由于我的存储库中存在大量文件。它主要发生在.cod文件中,我后来将其从版本控制中排除。 (我确实有理由跟踪它们。)我认为原因可能与Git使用文件句柄的速率有关。
我想知道能够被回复的问题是否与Windows相关,因为之前的两个海报都提到过Windows,没有人说过他们遇到过其他操作系统的问题。
答案 15 :(得分:0)
问题是因为你有一些处理这些文件的程序。 我有一个建议,你应该使用Unlocker找到正在处理它的程序:
答案 16 :(得分:0)
我也有这个问题,但我发现它是UltraEdit的方式,因为我使用UE来组织和编辑我的eclipse工作区~~
也许是因为UE有特定文件旧版本的句柄,Git无法取消链接。
关闭UltraEdit后,问题再也没有发生过。