小编典典

文件取消链接失败

all

我正在尝试执行 git pull 并收到以下错误:

文件“lib/xxx.jar”的取消链接失败。我应该再试一次吗?(是/否)

无论我选择 y 还是 n 都无法达到可以拉或推的状态。


阅读 79

收藏
2022-08-21

共1个答案

小编典典

这通常意味着一个进程仍在使用该特定文件(仍然有一个句柄)
(在 Windows 上,ProcessExplorer擅长跟踪那种进程)

尝试关闭您的其他程序,然后重试您的git pull.

请注意,您可以使用GIT_ASK_YESNO变量


2019 年 1 月更新:

使用 Git 2.21(2019 年第一季度),这应该更加固定,因为“ git gc”和“ git repack”在删除之前没有关闭他们发现不需要的打开的包文件,这在无法删除打开的文件的平台上不起作用。
这已得到纠正。

请参阅Johannes Schindelin ( ) 的提交
5bdece0
(2018
年 12 月 15 日。(由Junio C Hamano 合并 –
--提交
5104f8f
中,2019
年 1 月 18 日)dscho
gitster

gc/ repack: 需要时发布包

在 Windows 上,如果进程仍持有句柄,则无法删除或重命名文件。
为了解决这个问题,我们引入了该close_all_packs()功能。

早些时候,我们确保在生成包之前释放包git gc,以防gc想要删除不再需要的包。

但是这个开发者忘记了它gc自己也需要放弃包,例如当通过--aggressive选项合并所有包时。

同样,git repack -d想要删除过时的包,因此也需要关闭所有包句柄。


2016 年 1 月更新

这应该在 Git 2.8(2016 年 3 月)中得到修复(参见下面的 Git 2.19,Q3 2018)

请参阅Johannes Schindelin (
)的提交
d562102
提交
dcacb1b
提交
df617b5
提交
0898c96
(2016
年 1 月 13 日) 。(由Junio C Hamano
合并
——提交
3c80940
中,2016
年 1 月 26 日)dscho
gitster

fetch: 在垃圾收集之前释放包文件

在自动 gc’ing 之前,我们需要确保打包文件被释放,以防它们需要重新打包和垃圾收集。

许多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 月)确实提到了问题
755
,这也应该可以缓解这个问题(提交
2db0641
):

确保临时文件句柄不被子进程继承


2022-08-21