我正在使用git,并做了一个小提交,然后是一个大提交。我决定在推送它们之前使用git rebase
将两个提交压缩在一起。 (我以前从未这样做过。)
所以我做了:
git rebase -i HEAD~2
这给了我我的编辑,在那里我选择了先前的提交并压制了后一个提交。当我保存时,git说:
错误:无法统计' filename ':权限被拒绝
无法将 sha1应用于以后提交 ... 该提交的初始文本行
现在:
git log
时,不会出现提交。git status
告诉我,我“目前不在任何分支上。”发生什么事了!?我该如何解决?
答案 0 :(得分:554)
尝试关闭打开文件夹的所有程序,例如编辑器,资源管理器窗口,命令提示符和FTP程序。这总能解决我在Windows上的问题。
答案 1 :(得分:243)
关闭IDE(VISUAL STUDIO / ATOM等)。它可能会起作用
答案 2 :(得分:165)
我在Windows上只看到过这个错误,它似乎意味着git在尝试应用补丁时阻止git修改文件。
Windows往往会给予进程对文件的独占访问权限,因为在过去,病毒检查程序一直是怀疑的来源,但我从来没有最终证明这一点。
可能最容易做的就是中止并再试一次,希望下次不会发生。
git rebase --abort
您可以尝试使用git apply
并了解git在执行git rebase --continue
之前实际尝试做什么,但是老实说我不建议这样做。我见过这种情况的大多数时候,尝试过的事情比偶然错过或搞砸了更好。
答案 3 :(得分:22)
当我在我的机器上看到这个时,它比仅仅“某个进程打开文件”更糟糕。该文件的实际所有权被提升到我(以管理员身份运行)只能在重新启动后访问它的程度。
最近我可以说,IIS是问题的一部分。如果我在需要修改大量文件的两个主要分支之间切换,git将删除一个文件或目录(通常是DLL),而IIS正试图用它做一些事情。此时,IIS进程会自动使用已锁定的版本覆盖磁盘上的文件,并且似乎由nobody拥有。
此时停止IIS不会这样做。我发现最好的办法是重新启动,并记得在将来更换主要分支之前停止IIS。
我知道这并没有真正回答这个问题,但可能会对其他人有所帮助。
答案 4 :(得分:13)
我只是偶然发现了这个问题的答案 - 这个错误就是这样一个错误。# 错误:无法统计' reddit / app / views / links':权限被拒绝
我得到的全部 - 尝试合并时。 我读了几个答案然后才实现 - 我所要做的就是关闭我的代码编辑器,它恰好是Atom。
关闭编辑器后 - 我跑了" git merge"再次繁荣,它起作用了。
多么无意义的错误:(
答案 5 :(得分:12)
在Windows上,它可以是阻止这些文件的TortoiseGIT进程。 打开任务管理器并结束进程 TGitCache.exe 。
答案 6 :(得分:7)
如果你使用的IDE(如果你使用的话)可能也会妨碍你。这就是使用QtCreator时发生的事情。
答案 7 :(得分:6)
偶尔在Windows中发生这种情况
错误:无法统计'文件名':权限被拒绝
我经常打开多个bit bash实例,其中一个git bash实例位于我所从的远程分支中不存在的目录中。
关闭除git bash之外的所有实例解决了我的问题。
答案 8 :(得分:6)
当您使用SublimeText并且弹出窗口要求您购买该程序时,也会发生这种情况。
答案 9 :(得分:5)
在Win 10中使用SourceTree,通过关闭Atom编辑器解决了问题。
错误重现:
答案 10 :(得分:5)
当您有预览软件/应用程序观看项目时,例如Prepros或Codekit,这种情况经常发生。此外,如果当前正在编辑项目中的文件,Atom和Sublime(甚至是Notepad ++)可能会导致这种情况发生。
解决问题的最简单方法是关闭项目文件打开的任何内容,合并分支,然后重新打开它们以刷新它。这也将避免程序不再发生任何已发生的更改的任何问题,从而迫使您手动刷新项目。
答案 11 :(得分:4)
我有类似的问题。但解决起来非常简单。 在Windows机器上,我的文件浏览器打开了一个文件夹,该文件夹存在于一个分支中,但在另一个分支中没有检出。 关闭文件资源管理器解决了这个问题。
答案 12 :(得分:4)
我刚刚在Win 7下有这个。
$ git stash pop 错误:无法统计' parentFolder /子文件夹':权限被拒绝 错误:无法统计' parentFolder /子文件夹':权限被拒绝
诊断:
1>我去了子文件夹,它在那里,我无法删除它!
2>使用"进程资源管理器" - >查找 - >查找句柄和Dll - >把"子文件夹"在那里命名并搜索。
结果:事实证明它的XMLSpy已经在那里打开了一个xml,关闭XML Spy并再次尝试stash pop,它现在正在工作。
答案 13 :(得分:2)
我遇到这个问题是由我的编辑Intellij引起的。作为其内部版本控件的一部分,它已经完成并锁定了所有隐藏的git文件。 (由于各种原因,我没有使用Intellij附带的git插件......)
所以我以管理员身份打开了一个正常的dos窗口,更改为目录,然后执行
attrib -R /S
删除了对文件的锁定,之后一切正常,我可以使用GitHub Windows客户端同步我的更改。
答案 14 :(得分:2)
如果您正在运行webpack,请将其关闭。也请关闭您的IDE。完成这些操作后应该可以正常工作。
答案 15 :(得分:2)
我同意上述"关闭Visual Studio"答案。
然而,即使在我关闭Visual Studio之后,我必须做的另一个步骤是手动杀死 " devenv.exe" 任务资源管理器中的Visual Studio进程。 在我完成这个之后,我又能够在gitbash中运行:
git pull
且"无法统计文件名"错误消失了。这可能是由于Visual Studio扩展程序即使在关闭后也会保持打开的时间更长。
答案 16 :(得分:2)
我刚刚遇到这个问题。问题是 - 如果你打开了文件,那就被删除了\在rebase之后被替换了(你有一个没有这个文件的分支),git-system就会破坏。所以我关闭了所有打开的文件,然后尝试在其他分支上结帐
答案 17 :(得分:1)
这个错误也可能是因为文件仍被锁定"因为先前的git动作。它与Windows文件系统层的工作方式有关。我曾经读过一个很好的解释,但我不记得在哪里。
然而,在这种情况下,由于它基本上是竞争条件,您只需要继续中断的rebase过程。不幸的是,这种情况一直发生在我身上,所以我写了这个小的危险的帮助器来保持我的改变:
#!/bin/sh
set -e
git checkout .
git clean -df
git rebase --continue
如果您想要更加确定,可以使用git rebase --edit-todo
检查下一个要应用的提交是否真的是之前未能应用的提交。使用git clean -dn
确保您不删除任何重要文件。
答案 18 :(得分:1)
杀死与存储库相关的w3wp.exe进程为我修复了这个问题。
答案 19 :(得分:1)
如果你打开Meld merge tool,请关闭它。它会阻止文件覆盖。
答案 20 :(得分:1)
在Windows中,当使用photoshop时发生在我身上: 当我保存图像然后切换到分支(离开photoshop打开图像)时,我得到了git错误。在photoshop中关闭图像并重试
答案 21 :(得分:1)
在Windows上在 IntelliJ集成终端中重新建立基础时发生了。 我注意到我有 Git bash 客户端实例并行运行。
关闭 Git bash 解决了该问题。
答案 22 :(得分:1)
Windows 10 64 Bit上的相同问题,运行Git Bash版本2.9.0.windows1 使用Atom作为我的编辑。
这对我有用:我将Git软件文件夹(对我来说,这是C:\ Program Files \ Git)添加到Windows Defender的排除项中。
添加排除后,git checkout 'file'
工作正常。
答案 23 :(得分:1)
尝试关闭IDE(例如Sublime,VS Code,Webstorm等)并关闭打开了文件夹的程序(例如CMD,Powershell,CMDer,Terminal ...)将解决此问题。
答案 24 :(得分:1)
如果使用vscode,请杀死终端并打开一个新终端。 否则也可能关闭终端
答案 25 :(得分:0)
以我为例,我在后面运行了一个webpack开发服务器。
答案 26 :(得分:0)
一种替代解决方案,而不是像其他所有答案所说的那样,关闭可能锁定目录的所有应用程序,而是使用一种无需关闭所有文件即可解锁文件/目录的实用程序。 (我讨厌重新启动Visual Studio)
我使用的是LockHunter:https://lockhunter.com/也可能还有其他人,但是这个对我来说非常有用。
答案 27 :(得分:0)
就我而言,只需将 git 客户端更新到最新版本即可解决问题。
答案 28 :(得分:0)
在我的情况下,该文件是一个shell脚本(*.sh
文件),用于将我们的项目部署到本地开发服务器,供我的开发人员使用。
shell脚本应该一致地工作并且可以更新;所以我在与该脚本要部署的代码相同的Git项目中跟踪它。
shell脚本运行一个可执行文件,然后允许该可执行文件运行;所以脚本仍在运行;所以我的shell仍然打开脚本;所以它被锁定了。
我Ctrl+C
要杀死脚本(所以现在我的本地开发服务器不再可访问),现在我可以自由结账了。
答案 29 :(得分:0)
相同的问题,但使用SourceTree(或任何其他git客户端)。我正在添加我的答案,因为没有一个答案符合我的情况。
将分支从“develop”更改为“main”会更改本地文件夹的实际文件和子文件夹。可能会发生“master”中不存在的文件夹未完全删除,并且Windows认为您只是失去了访问权限(即使您是管理员)。 当从main合并到develop时,git客户端尝试访问该文件夹。如果没有访问权限,则会返回上述错误。
答案 30 :(得分:0)
我从我正在访问项目目录的文本编辑器中退出,然后尝试合并到主分支并且它有效。
答案 31 :(得分:0)
我刚遇到这个问题。这里没有答案碰巧为我解决了这个问题。
结束了我在一个分支上添加的nuget包,一旦切换回主分支,似乎不存在。一旦我做了合并,就会说newtonsoft ... xml无法统计。我会转到有问题的文件然后打开它,但是Windows抛出一个错误,说它找不到文件(即使我正在查看它)
我如何解决这个问题是右键单击删除文件(虽然有效,但我无法打开它,因为Windows无法找到它?)并尝试再次合并,它解决了问题。
很奇怪。
希望以后可以帮助别人。
答案 32 :(得分:0)
当我遇到同样的错误时,我也在使用Git Shell的Windows机器上。
然而,当时我打开了多个Git终端。
第一个终端收到了您在上面发布的错误,而另一个终端先前已经从yeoman运行了grunt serve
终端命令(链接如下)。第二个终端需要保持打开以托管本地服务器实例。
关闭正在运行的进程的所有终端窗口可能会导致错误消失。
至少那对我有用的东西。关闭第二个终端窗口后,我可以轻松签出不同的分支并操作文件。
Grunt Serve Command - Yeoman.I / O
http://yeoman.io/learning/
答案 33 :(得分:0)
当我的VS1013位于8.1的分支上时,我遇到了这个错误,我试图检查8.0分支。我需要回到VS并允许它更新到UpdateAll。然后我可以毫无错误地检查8.0分支。
答案 34 :(得分:0)
我们通过右键单击“程序文件”中的sh.exe并在“安全”选项卡中设置“以管理员身份运行”来解决权限问题。