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


342

我正在使用git,先进行一次小的提交,再进行一次大的提交。我决定git rebase在推送之前先将两个提交压缩在一起。(我以前从未做过。)

所以我做了:

git rebase -i HEAD~2

这给了我编辑器,在这里我选择了较早的提交,并压缩了较晚的提交。当我保存时,git说:

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

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

现在:

  • 我这样做时都不会出现任何提交git log
  • git status 告诉我我“当前不在任何分支机构”。
  • 一个文件被列为已修改文件并在索引中,而两个文件被列为未跟踪文件。我的第一次提交只有一个文件(我认为),而第二次提交有很多文件。

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


10
您是否有机会在Windows上使用git?
CB Bailey

是。我在DOS窗口中运行命令。
瑞安·伦迪

2
您正在运行病毒检查程序吗?有时劣质的病毒检查程序会导致此类问题。
Greg Hewgill

53
我遇到了git checkout的问题(因此,如所接受的答案所建议的那样,不可以中止任何操作),但是关闭所有IDE可以让我通过。第二个答案应该是公认的一个
加锁存

1
@IanGrainger,您指的答案是在接受答案八个月后发布的。我是否需要每隔几个月来回访我的所有问题,以潜在地更改所有问题的已接受答案?投票按钮在那里是有原因的。如果最喜欢的答案比已接受的答案对您有更多帮助,请使用它。谁在阻止你?但是我接受了我所做的回答,因为它可以帮助我,我就是提出这个问题的人。
Ryan Lundy

Answers:


195

我只在Windows上见过此错误,这似乎意味着在尝试应用补丁时,某些东西阻止了git修改文件。

Windows倾向于在不需要时授予进程对文件的独占访问权限,在过去,病毒检查程序一直是可疑的来源之一,但我从来没有得出结论。

可能最简单的方法是中止并重试,希望下次不会发生。

git rebase --abort

您可以在使用git applya之前尝试使用并了解git实际要执行的操作,git rebase --continue但老实说,我不建议这样做。在大多数情况下,我看到这种尝试的可能性总是比偶然的事情更好,甚至会意外丢失或弄乱。


6
@Kyralessa:嗯,您是否尝试过重启?如果某些东西持续锁定该文件,则在重新启动后(或有些不太激烈的东西会释放该文件),您应该能够git checkout -- previously-locked-file备份并运行。
CB Bailey

51
好吧,我仍然不确定到底发生了什么,但是据我所知,VS 2010锁定了该文件(奇怪的是,它是一个.xml doc文件)。Process Explorer找不到锁定该文件的任何内容,但是退出VS之后,我可以使用它git checkout来取回该文件(git status已删除),现在一切都恢复了,直到尝试重新设置基准/压扁为止。也许我应该再试一次,尽管此时我感到有些不安。
瑞安·伦迪

3
跟进,以后又有很多月亮:我再也没有这个问题了。变基工作良好,甚至包括交互式变基。一定是暂时的VS文件锁定故障。
Ryan Lundy

49
关闭Visual Studio 2010也为我修复了它
Trev

4
Atom显然还锁定文件。重新启动修复它。
奥古斯丁·布拉利

651

尝试关闭所有已打开文件夹的程序,例如编辑器,资源管理器窗口,命令提示符和FTP程序。这始终可以在Windows上为我解决此问题。


72
我遇到了同样的错误。我刚刚关闭了视觉工作室,一切正常。
jacobsimeon 2012年

6
在记得WinLess LESS-> CSS转换器隐藏在后台之前,我关闭了几乎所有我能想到的东西。
Michael Martin-Smucker 2012年

6
当我尝试合并时,Visual Studio锁定了nuget包。结束VS对我有用。
CodeHxr 2012年

7
我在Windows上看到的此错误的最常见来源是Visual Studio锁定文件。按照规定,在切换分支,合并等之前关闭
VS。– longda

5
“我也是” Atom的答案。似乎锁定了文件和目录;关闭它可以解决问题。
2015年

277

只需关闭您的IDE(VISUAL STUDIO / ATOM等)。可能有效


1
在IntelliJ中,停止正在运行的Tomcat服务对我有用。比重新启动IDE容易一点。
Phil Carter

我还打开了一个Git Bash窗口-关闭对我有用。
文斯一世(

任何值得盐分的IDE都不应在仓库中锁定任何东西…… 竖起大拇指!
LightCC

在vs代码上工作
Muhammed Moussa

在Windows 10上使用Atom签入临时分支后,请解决此问题。关闭并重新打开Atom可以为我解决此问题。
mickburkejnr

24

当我在计算机上看到此文件时,这比仅“某个进程打开了文件”还差。文件的实际所有权增加到我(以管理员身份运行)只能在重新启动后才能访问它的程度。

据我所知,IIS是问题的一部分。如果我在需要修改大量文件的两个主要分支之间切换,则git会在IIS尝试对其执行某些操作时删除文件或目录(通常是DLL)。此时,IIS进程会自动使用已锁定且似乎没有任何人拥有的版本覆盖磁盘上的文件。

此时停止IIS并不能完成。我发现最好的方法是重新启动,并记住在以后跨主要分支进行更改之前先停止IIS。

我知道这并不能真正回答问题,但可能会对其他人有所帮助。


嗨,迈克...我们也遇到了同样的问题,但是出了问题。我们一直在运行IIS的许多项目上使用相同的过程,从来没有问题。但是,有一天,它开始发生……令人困惑和沮丧。自编写本教程以来,您是否学到了更多东西?
伊桑·布朗

感谢Mike的见解-在我的情况下,签出一个ASP.NET MVC项目的旧分支,该分支与上一个分支具有不同的绑定URL,这导致Visual Studio和IIS对该项目中的某些文件进行锁定。在IIS中停止适当的apppool删除了锁定。
Fundead

IIS也是我的罪魁祸首。当这个弹出窗口时,iisreset似乎可以释放文件锁。
alexm

我发现OneDrive
也会

这在win10上也发生在我身上,需要重新启动,但是我没有测试iisreset解决方案。
qdread

17

在Windows上,它可能是阻止这些文件的TortoiseGIT进程。打开任务管理器并结束进程TGitCache.exe


2
很高兴知道,尽管就我而言,我没有使用TortoiseGit。我只是使用命令行。
Ryan Lundy

13

我只是偶然发现了这个答案线程-这个错误是伪造的错误。#错误:无法统计'reddit / app / views / links':权限被拒绝

这就是我想要的-尝试合并时。我读了一些答案,然后才意识到-我要做的就是关闭我的代码编辑器,恰好是Atom。

关闭编辑器后,我再次运行了“ git merge”,然后繁荣起来了。

毫无意义的错误:(


谢谢!您不会每天都在列表中看到“正确”的答案。我建议将此标记为正确答案。解决实际问题不是有意义的,而不是中止当前操作。
Nikhil Kuriakose


10

我偶尔在Windows中发生这种情况

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

大多数情况下,我会打开多个bit bash实例,而git bash实例之一位于我要从其获取的远程分支中不存在的目录中。

关闭一个实例之外的所有git bash可以为我解决问题。


9

如果您使用的IDE(以防万一,请使用)可能也会给您带来麻烦。这就是使用QtCreator时发生的事情。


使用PhpStorm就是这种情况。重新启动它可以修复该错误。
lancemonotone

7

在Win 10中使用SourceTree,通过关闭Atom编辑器解决了该问题。

错误重现:

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

6

当您使用SublimeText且未关闭要求您购买程序的弹出窗口时,也会发生这种情况。


1
另外随着凌动了,它只是由具有项目/文件树开
哈尔

1
像@Hal一样,我的问题与Atom有关。这是因为一个分支中的文件夹不在另一个分支中。关闭Atom可以解决此问题,但是您也可以折叠项目树(以隐藏文件夹),这也可以工作。
jsalwen

6

当您使用预处理软件/应用程序监视项目时(例如Prepros或Codekit),通常会发生这种情况。此外,如果当前正在编辑项目中的文件,则Atom和Sublime(甚至Notepad ++)也可能导致这种情况发生。

解决该问题的最简单方法是关闭打开项目文件的所有内容,合并分支,然后重新打开它们以刷新它。这也将避免程序不再意识到已发生的任何更改的任何问题,从而迫使您手动刷新项目。


1
天哪!我在后台运行elm-live。这省了我很多头痛。
frostymarvelous

6

如果您正在运行webpack,请关闭它。也请关闭您的IDE。做完这些事情后应该可以正常工作。


4

我有一个类似的问题。但这很容易解决。在Windows机器上,我的文件资源管理器打开了一个文件夹,该文件夹存在于一个分支中,但我签出的另一个分支中却没有。关闭文件资源管理器即可解决该问题。


4

我刚刚在Win 7下有了这个。

$ git stash pop错误:无法统计“ parentFolder / subfolder”:权限被拒绝错误:无法统计“ parentFolder / subfolder”:权限被拒绝

诊断:

1>我去了子文件夹,它在那里,我无法删除它!

2>使用“进程浏览器”->查找->查找句柄和Dll->将“子文件夹”名称放在此处并进行搜索。

结果:事实证明是XMLSpy已在其中打开xml之一,关闭XML Spy并再次尝试隐藏存储,现在它正在工作。


4

IntelliJ集成终端内重新建立基础时在Windows上发生了。我注意到我有Git bash客户端实例并行运行。

关闭Git bash解决了该问题。


2

我遇到此问题的原因是我的编辑器Intellij。作为其内部版本控制的一部分,它已经遍历并锁定了所有隐藏的git文件。(由于各种原因,我没有使用Intellij随附的git插件...)

因此,我以管理员身份打开了一个普通的dos窗口,更改为目录并执行

attrib -R /S

这消除了文件上的锁定,此后一切正常,我可以使用GitHub Windows客户端同步更改。


2

我同意以上“关闭Visual Studio”的答案。

但是,额外的步骤我即使我最好关闭Visual Studio的是手工做 “devenv.exe的” Visual Studio中的任务Explorer进程。完成此操作后,我可以再次在gitbash中运行:

git pull

并且“无法统计文件名 ”错误消失了。这可能是由于Visual Studio扩展使进程即使在关闭后仍保持打开状态更长的时间。


2

我刚遇到这个问题。关键是-如果您打开了文件,则在重新设置基准之后将其删除\替换(您的分支不再具有该文件),git系统会损坏。所以我关闭了所有打开的文件,然后尝试在其他分支上结帐


2

一种替代解决方案,而不是像其他所有答案所说的那样,关闭可能锁定目录的所有应用程序,而是使用一种可以在不关闭所有内容的情况下解锁文件/目录的实用程序。(我讨厌需要重新启动Visual Studio)

我使用的是LockHunter:https ://lockhunter.com/ 可能还有其他人,但是这个对我来说非常有用。


1

在运行Git Bash版本2.9.0.windows1的Windows 10 64位上,存在相同的问题使用Atom作为我的编辑器。

这对我有用:我将Git软件文件夹(对我来说是C:\ Program Files \ Git)添加到Windows Defender的排除项中。

添加排除后,git checkout 'file'效果很好。


1

由于先前的git操作,文件仍被“锁定”,也可能导致此错误。它与Windows文件系统层的工作方式有关。我曾经读过一个很好的解释,但是我不记得在哪里。

但是,在这种情况下,由于它基本上是竞争条件,因此您所要做的就是继续中断的rebase过程。不幸的是,这总是发生在我身上,所以我写了这个危险的小助手来保持我的基础:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

如果您想更加确定,可以使用git rebase --edit-todo来检查下一个要应用的提交是否确实是之前未应用的提交。用于git clean -dn确保您不删除任何重要文件。


1

在Windows中,使用Photoshop时发生在我身上:当我保存图像然后切换到分支(图像保持打开状态并离开Photoshop)时,我得到了git错误。在Photoshop中关闭图像,然后重试



1

杀死与存储库相关的w3wp.exe进程为我解决了此问题。


1

就我而言,我在后面运行了一个webpack开发服务器。



0

当我遇到相同的错误时,我也在使用Git Shell的Windows计算机上。

但是,当时我打开了多个Git终端。

第一个终端收到您在上面发布的错误,而另一个终端以前运行了 grunt serve从yeoman终端命令(在下面链接)。第二个终端需要保持打开状态以托管本地服务器实例。

关闭所有正在运行的进程的终端窗口可能会导致错误消失。

至少那对我有用。关闭第二个终端窗口后,可以轻松签出不同的分支并处理文件。

咕unt服务命令-Yeoman.I / O
http://yeoman.io/learning/


0

我刚遇到这个问题。这里没有一个答案是为我解决的。

最终我在一个分支上添加了nuget包,一旦切换回master分支,该分支似乎就不存在了。一旦完成合并,它将说newtonsoft ... xml无法统计。我将转到有问题的文件并打开它,但是Windows抛出一个错误,说它找不到该文件(即使我正在正确地查看它)

我如何解决此问题的方法是右键单击删除文件(该文件有效,但由于Windows无法找到它而无法打开它??)并尝试再次合并,从而解决了该问题。

很奇怪。

希望这对以后的人有所帮助。


0

我从正在访问项目目录的文本编辑器退出,然后尝试合并到master分支,并且它起作用了。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.