385

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

所以我做了:

git rebase -i HEAD~2

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

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

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

现在:

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

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

4

36 回答 36

705

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

于 2012-01-11T03:03:29.870 回答
308

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

于 2013-09-25T19:55:45.857 回答
214

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

当确实不需要时,Windows 倾向于为进程提供对文件的独占访问权限,在过去,病毒检查程序一直是怀疑的来源之一,但我从未最终证明这一点。

可能最简单的做法是中止并重试,希望下次不会发生这种情况。

git rebase --abort

您可以尝试使用git apply并了解 git 在执行之前实际尝试执行的操作,git rebase --continue但老实说,我不推荐这样做。大多数情况下,我都看到这种尝试有比偶数更好的机会意外错过或搞砸。

于 2011-05-11T21:41:59.483 回答
24

当我在我的机器上看到这个时,它比“某个进程打开了文件”更糟糕。该文件的实际所有权被提升到我(以管理员身份运行)只能在重新启动后访问它的地步。

我能说的最接近的是,IIS 是问题的一部分。如果我在需要修改大量文件的两个主要分支之间切换,git 将删除一个文件或目录(通常是 DLL),而 IIS 正试图用它做某事或其他事情。此时,IIS 进程会自动使用已锁定且似乎不属于任何人的版本覆盖磁盘上的文件。

此时停止 IIS 不会这样做。我发现最好的办法是重新启动,并记住在将来更改主要分支之前停止 IIS。

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

于 2011-12-08T22:43:28.277 回答
20

如果使用 vscode,请杀死终端并打开新终端。否则也可能关闭终端

于 2019-06-13T16:36:18.627 回答
18

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

于 2011-08-18T18:13:45.930 回答
14

我只是偶然发现了这个答案线程 - 这个错误是一个虚假的错误。# error: cannot stat 'reddit/app/views/links': Permission denied

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

关闭编辑器后-我再次运行“git merge”并繁荣,它起作用了。

多么无意义的错误:(

于 2015-12-15T16:47:24.463 回答
10

如果您使用的 IDE(如果您使用其中一个)也可能会妨碍您。这就是我在使用 QtCreator 时发生的事情。

于 2011-09-27T07:33:10.823 回答
10

这偶尔会在 Windows 中发生在我身上

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

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

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

于 2018-01-29T19:34:30.447 回答
8

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

于 2018-11-29T20:12:57.570 回答
7

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

于 2014-09-30T06:19:48.837 回答
7

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

错误重现:

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

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

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

于 2017-03-26T05:31:17.190 回答
6

IntelliJ 集成终端中变基时发生在 Windows 上。我注意到我有Git bash客户端实例并行运行。

关闭Git bash解决了这个问题。

于 2018-11-22T10:48:57.367 回答
4

我有一个类似的问题。但解决起来非常简单。在 Windows 机器上,我的文件资源管理器打开了一个文件夹,该文件夹存在于一个分支中,但在我签出的另一个分支中不存在。关闭文件资源管理器解决了这个问题。

于 2015-04-16T15:17:41.033 回答
4

我刚刚在Win 7下有这个。

$ git stash pop 错误:无法统计“父文件夹/子文件夹”:权限被拒绝错误:无法统计“父文件夹/子文件夹”:权限被拒绝

诊断:

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

2>使用“进程资源管理器”->查找->查找句柄和DLL->将“子文件夹”名称放在那里并搜索。

结果:原来是 XMLSpy 在那里打开了其中一个 xml,关闭 XML Spy 并再次尝试 stash pop,它现在正在工作。

于 2015-07-03T08:57:43.493 回答
3

另一种解决方案是使用一个实用程序来解锁文件/目录而不关闭所有内容,而不是关闭所有可能锁定目录的应用程序。(我讨厌需要重新启动 Visual Studio)

LockHunter 是我使用的一个:https ://lockhunter.com/那里可能还有其他人,但是这个对我来说效果很好。

于 2018-12-14T16:50:18.197 回答
3

尝试关闭 IDE(例如 Sublime、VS Code、Webstorm 等)并关闭打开文件夹的程序(例如 CMD、Powershell、CMDer、Terminal 等)将解决此问题。

于 2020-12-10T07:55:58.980 回答
2

我遇到这个问题是由我的编辑 Intellij 引起的。作为其内部版本控制的一部分,它检查并锁定了所有隐藏的 git 文件。(由于种种原因,我没有使用 Intellij 自带的 git 插件……)

于是我以管理员身份打开了一个普通的dos窗口,切换到目录,执行

attrib -R /S

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

于 2013-08-15T22:54:59.423 回答
2

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

但是,即使在我关闭 Visual Studio 之后,我还必须做的一个额外步骤是手动终止任务资源管理器中 “devenv.exe” Visual Studio 进程。完成此操作后,我能够再次在 gitbash 中运行:

git 拉

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

于 2014-05-22T09:12:54.013 回答
2

我刚遇到这个问题。问题是 - 如果您打开了文件,该文件在 rebase 后被删除\替换(您有一个不再有此文件的分支),则 git 系统会损坏。所以我关闭了所有打开的文件,然后尝试在其他分支上结帐

于 2016-11-01T13:43:22.813 回答
1

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

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

添加排除项后,git checkout 'file'工作正常。

于 2016-06-29T21:20:18.937 回答
1

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

然而,在这种情况下,由于它基本上是一个竞争条件,你所要做的就是继续你中断的变基过程。不幸的是,这一直发生在我身上,所以我写了这个危险的小帮手来保持我的变基:

#!/bin/sh

set -e

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

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

于 2016-07-10T11:07:15.343 回答
1

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

于 2016-11-30T12:19:40.073 回答
1

如果您打开了Meld 合并工具,请将其关闭。它阻止文件覆盖。

于 2017-02-13T18:28:49.357 回答
1

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

于 2017-05-11T04:46:02.407 回答
1

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

于 2018-09-18T01:03:25.430 回答
0

当我的 VS1013 位于针对 8.1 的分支上并且我试图签出 8.0 分支时,我收到了这个错误。我需要回到 VS 并允许它更新所有。然后我可以无错误地签出 8.0 分支。

于 2014-04-30T22:51:43.393 回答
0

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

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

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

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

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

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

于 2014-09-25T20:13:47.767 回答
0

我刚遇到这个问题。这里没有一个答案碰巧为我解决了这个问题。

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

我如何解决这个问题是右键单击删除文件(该文件有效但我无法打开它,因为 Windows 找不到它???)并尝试再次合并并解决了问题。

很奇怪。

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

于 2016-06-15T20:06:45.667 回答
0

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

于 2016-07-07T01:31:24.327 回答
0

同样的问题,但使用 SourceTree(或任何其他 git 客户端)。我正在添加我的答案,因为没有一个答案符合我的情况。

将分支从“develop”更改为“main”会更改本地文件夹的实际文件和子文件夹。可能发生的情况是,“主”中不存在的文件夹没有被完全删除,Windows 认为您只是失去了访问权限(即使您是管理员)。当从 main 合并到 development 时,git 客户端会尝试访问该文件夹。如果没有访问权限,它会返回提到的错误。

  • 从一个分支切换到最新可以解决问题,然后回到主分支(仔细检查文件夹/文件是否实际上在本地删除)。
  • 关闭客户端和/或您的编辑器并不能解决问题!
  • 重启有帮助,但浪费时间(恕我直言)
于 2016-07-26T13:57:56.943 回答
0

在我的情况下,该文件是一个 shell 脚本(*.sh 文件),用于将我们的项目部署到本地开发服务器,供我的开发人员使用。

shell 脚本应该始终如一地工作并且可能会被更新;所以我在与脚本要部署的代码相同的 Git 项目中跟踪它。

shell 脚本运行一个可执行文件,然后允许该可执行文件运行;所以脚本仍在运行;所以我的外壳仍然打开脚本;所以它被锁定了。

Ctrl+C想杀死脚本(所以现在我的本地开发服务器不再可访问),现在我可以自由结帐了。

于 2017-02-04T20:29:42.847 回答
0

就我而言,只需将 git 客户端更新到最新版本即可解决问题。

https://git-scm.com/downloads

于 2021-07-13T03:01:56.507 回答
0

我在 Windows 10 上并且出现此错误,但即使在 PC 重新启动并以管理员权限打开后也无法解决我的问题。

所以看来我的存储库权限是问题所在。

只是为了确保我安装了所有新的 Windows 更新,然后我重新启动了我的电脑,最后我删除了所有不必要的权限。

以管理员身份运行 powershell 并运行:

attrib -s <path_to_your_directory> 
attrib -r -a <path_to_your_directory> 

关于这个 powershell 命令的详细信息在这里: https ://docs.microsoft.com/en-us/windows-server/administration/windows-commands/attrib

于 2022-01-30T08:22:57.150 回答
-1

我们通过右键单击程序文件中的 sh.exe 并在“安全”选项卡中设置“以管理员身份运行”解决了权限问题。

于 2012-08-30T13:13:52.267 回答