我正在尝试做一个git pull我得到以下错误:
取消链接文件'lib/xxx.jar'失败.我应该再试一次吗?(Y/N)
无论我选择y还是n,都无法进入我可以拉或推的状态.
使用msysgit 1.7.0.2时git rebase -i,它会挂起并且没有消息.
进入后ctrl+c,我可以看到
'unlink of file failed, should I try again (y/n)?'
Run Code Online (Sandbox Code Playgroud)
然后我试过git rebase --abort但得到了同样的错误信息.所以现在它停留在rebase过程的中间.此错误似乎是由只读文件引起的.
有什么方法可以解决这个问题吗?
运行版本1.9.4.msysgit.0的git,我得到了提到的错误(S)几乎每次运行时git gc在命令行或通过git gui时,它提示我"压缩松散物":
Counting objects: 1110956, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (269562/269562), done.
Writing objects: 100% (1110956/1110956), done.
Total 1110956 (delta 636114), reused 1110956 (delta 636114)
Unlink of file '.git/objects/pack/pack-207f1feb5376880778637c ... 8371cea62.pack'
failed. Should I try again? (y/n) n
Checking connectivity: 1110956, done.
Run Code Online (Sandbox Code Playgroud)
唯一的解决方案似乎是n针对每个锁定的文件 - 正如此线程所建议的那样:
简短的回答:点击'n'来完成所有这些,然后手动运行"git gc".
线程还暗示......
问题是文件由试图执行gc的父git.exe保持打开状态.
...当看过程树时,完全看似合理:

我的问题是,我能做些什么来防止这种情况发生?每天多次这样做真的很烦人......为什么会这样?它是一个git/w32唯一的bug吗?
更新1:澄清 - 在n按照描述多次点击后,git gc完成并且本地存储库是"干净的",即重新运行git …
我有git repo,我不小心将一些库文件提交到git远程仓库.
现在它已经增加了大约6.23 GB的大小.然后我尝试使用以下命令删除库
git filter-branch -f --index-filter "git rm -rf --cached --ignore-unmatch node_modules" -- --all
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now
Run Code Online (Sandbox Code Playgroud)
现在,库已从存储库中删除,并且它未在repo文件夹中列出.但是,本地回购的规模仍然比以前更大
还有一件事是执行上述命令需要花费大量时间.我不确定他们是否正常工作
我甚至尝试将其推送到远程仓库,
git push --all --force
Run Code Online (Sandbox Code Playgroud)
但是没有成功推送,它会一直尝试直到最后一个突然到来,因为远程仓库无法到达或没有响应那种
我也试过重写标签
git filter-branch -f \ --index-filter 'git rm -r --cached --ignore-unmatch node_modules' \ --tag-name-filter 'cat' -- --all
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下方法来使它工作
git config --global pack.windowMemory 0
git config --global pack.packSizeLimit 0
git config --global pack.threads "3"
Run Code Online (Sandbox Code Playgroud)
但无论我做什么,回购的大小仍然是相同的
注意:我试过了
git fsck --full --unreachable
Run Code Online (Sandbox Code Playgroud)
列出了几个无法访问的标记
我在跑步
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)
并得到结果
Counting objects: 100% (619263/619263), done.
Delta compression using up to 8 threads
Compressing objects: 100% (132698/132698), done.
Writing objects: 100% (619263/619263), done.
Total 619263 (delta 316177), reused 608671 (delta 305796)
Unlink of file '.git/objects/pack/pack-15e469b10c92d51ece59ad7c055fc1ac64ff3056.pack' failed. Should I try again? (y/n) y
Unlink of file '.git/objects/pack/pack-15e469b10c92d51ece59ad7c055fc1ac64ff3056.pack' failed. Should I try again? (y/n) n
Unlink of file '.git/objects/pack/pack-4b025e2c952e34cf7b721520909ab216f6223fb3.pack' failed. Should I try again? (y/n)
Run Code Online (Sandbox Code Playgroud)
为什么是这样 ?和
如何避免与要求我输入 y/n 的命令交互?
请看这张照片!
可能是那个傻的git?Git无法取消链接某些文件,但只有git.exe持有此文件的句柄.(权限很好 - 完全控制)请问,这个问题是否有安全的解决方案?我的Git版本是1.9.5-preview20141217