git rebase:“错误:无法统计'文件':权限被拒绝”

时间:2011-05-11 21:33:35

标签: git git-rebase

我正在使用git,并做了一个小提交,然后是一个大提交。我决定在推送它们之前使用git rebase将两个提交压缩在一起。 (我以前从未这样做过。)

所以我做了:

git rebase -i HEAD~2

这给了我我的编辑,在那里我选择了先前的提交并压制了后一个提交。当我保存时,git说:

  

错误:无法统计' filename ':权限被拒绝

     

无法将 sha1应用于以后提交 ... 该提交的初始文本行

现在:

  • 当我执行git log时,不会出现提交。
  • git status告诉我,我“目前不在任何分支上。”
  • 一个文件在修改后列在索引中,两个文件列为未跟踪。我的第一次提交只有一个文件(我认为),我的第二次提交有很多。

发生什么事了!?我该如何解决?

35 个答案:

答案 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编辑器解决了问题。

错误重现:

  1. 在分支B中,创建一个md文件,使用Atom编辑,保存并提交。
  2. 切换到分支A,从服务器下拉新的提交。
  3. 尝试切回,Opps,它说“错误:无法统计'文件':权限被拒绝”。

答案 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 客户端更新到最新版本即可解决问题。

https://git-scm.com/downloads

答案 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并在“安全”选项卡中设置“以管理员身份运行”来解决权限问题。