git rebase:“error:can not stat'file':Permission denied”

我正在使用git,并做了一个小的提交,然后是一个大的。 我决定使用git rebase来压缩它们之前的两个提交。 (我从来没有这样做过。)

所以我做了:

git rebase -i HEAD~2

这给了我我的编辑,在那里我select了先前的提交,并压扁了后面的提交。 当我保存时,git说:

错误:不能stat' 文件名 ':权限被拒绝

无法将sha1应用于稍后的提交该提交的文本的第一行

现在:

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

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

我只有在Windows上看到这个错误,它似乎是什么阻止git修改文件,当它试图应用补丁。

Windows往往会让进程独占访问文件,而不应该真的有必要,过去的病毒检查已成为一个怀疑的来源,但我从来没有证实这一结论。

可能最简单的做法是放弃并重试,希望下次不会发生。

 git rebase --abort 

你可以尝试使用git apply和git在git rebase --continue之前实际上正在尝试做什么的知识 – git rebase --continue但是诚实地说,我不会推荐这个。 大多数时候,我看到这个尝试有一个更好的比平均偶然错过或搞砸的机会。

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

只需closures你的IDE(VISUAL STUDIO / ATOM等)。 它可能工作

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

最近我可以告诉,IIS是问题的一部分。 如果我在需要大量文件修改的两个主要分支之间切换,git将删除一个文件或目录(通常是DLL),而IIS正在尝试做某些事情。 此时,IIS进程会自动使用locking的版本覆盖磁盘上的文件,并且似乎由nobody拥有。

在这一点上停止IIS不这样做。 我发现最好的办法就是重新启动,并记住在未来主要分支机构改变之前停止IIS。

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

我只是偶然发现了这个线程的答案 – 这个错误是这样一个虚假的错误。#错误:不能统计'reddit /应用程序/视图/链接':权限被拒绝

这就是我得到的 – 试图合并时。 我读了一些答案,然后来到了实现 – 我所要做的就是closures我的代码编辑器,恰好是Atom。

一旦closures编辑器 – 我再次运行“混帐合并”,繁荣,它的工作。

什么毫无意义的错误:(

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

当您使用SublimeText时,也会发生这种情况,并且popup式窗口要求您购买该程序未closures。

我有一个类似的问题。 但解决起来非常简单。 在Windows机器上,我的文件资源pipe理器有一个打开的文件夹存在于一个分支,但没有检出。 closures文件浏览器解决了这个问题。

我在Win 7下刚刚有这个。

$ git stashpopup错误:不能stat'parentFolder /子文件夹':权限被拒绝错误:不能统计'parentFolder /子文件夹':权限被拒绝

诊断:

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

2>使用“进程资源pipe理器” – >查找 – >查找句柄和Dlls – >把“子文件夹”的名字和search。

结果:事实certificate,它的XMLSpy已经打开了其中的一个XML,closuresXML间谍,并尝试再次存储popup,它现在工作。

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

解决问题最简单的方法是closures项目文件打开的任何东西,合并分支,然后重新打开它们以刷新它。 这也将避免程序不再意识到发生了任何变化的任何问题,迫使您手动刷新项目。

我刚刚有这个问题。 事情是 – 如果你打开了文件,那么在rebase(你有一个没有这个文件的分支了)之后被replace掉了,git-system会破坏。 所以我closures了所有打开的文件,然后尝试在其他分支结帐

在Win 10中使用SourceTree,通过closuresAtom编辑器来解决问题。

错误重现:

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

如果你使用的IDE(如果你使用的话)也可能会妨碍你的发展。 这是使用QtCreator时发生的事情。

我遇到这个问题是由我的编辑Intellij引起的。 作为内部版本控制的一部分,它已经通过并locking了所有隐藏的git文件。 (由于各种原因,我没有使用Intellij附带的git插件…)

于是我以pipe理员的身份打开了一个普通的dos窗口,改成了目录,然后执行

 attrib -R /S 

这删除了文件上的locking和一切后,我可以使用GitHub的Windows客户端同步我的变化。

我同意上面的“closuresVisual Studio”的答案。

然而,即使在我closuresVisual Studio之后,我还需要做一个额外的步骤,即在Task Explorer中手工杀死 “devenv.exe” Visual Studio进程。 我做完这些之后,我又能够在gitbash中运行了:

混帐拉

和“不能stat 文件名 ”错误消失。 这可能是由于Visual Studio的扩展,即使在closures之后仍然保持这个过程打开的时间更长。

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

但是,在这种情况下,由于这基本上是一种竞争条件,所以你只需要继续你中断的rebase进程 。 不幸的是,这一直发生在我身上,所以我写下了这个小小的帮手,

 #!/bin/sh set -e git checkout . git clean -df git rebase --continue 

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

在Windows中使用Photoshop时发生在我身上:当我保存一个图像,然后切换到一个分支(离开photoshop打开图像),我得到了GIT错误。 在Photoshop中closures图像,然后重试

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

我遇到了这个错误,当我的VS1013是在一个分支瞄准8.1,我试图结帐一个8.0分支。 我需要回到VS并允许它UpdateAll。 然后,我可以签出8.0分支没有错误。

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

但是,当时我有多个Gitterminal打开。

第一个terminal收到你在上面发布的错误,另一个terminal以前运行过yeoman的grunt serve terminal命令(下面链接)。 第二个terminal需要保持打开状态来托pipe本地服务器实例。

closures运行正在进行的进程的所有terminal窗口可能会导致错误消失。

至less这是对我有用的。 closures第二个terminal窗口后,我可以轻松检出不同的分支并操作文件。

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

我刚刚遇到这个问题。 这里的答案不是为了解决这个问题。

结束了作为nuget包,我join了一个分支,一旦切换回主分支,似乎不存在。 一旦我做了一个合并,它会说newtonsoft … XML无法统计。 我会去有问题的文件,并打开它,但Windows抛出一个错误,说它无法find该文件(即使我正在看它)

我如何解决这是右键单击删除文件(哪些工作,但我不能打开它,因为Windows无法find它???),并尝试再次合并,并解决了问题。

很奇怪。

希望以后能帮助别人。

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

这工作对我来说:我添加了Git软件文件夹(对于我来说,这是C:\ Program Files \ Git)到Windows Defender的排除。

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

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

同样的问题,但使用SourceTree(或任何其他的git客户端)。 我添加了我的答案,因为没有答案对应于我的情况。

将分支从“开发”更改为“主”更改本地文件夹的实际文件和子文件夹。 可能发生的情况是,“主”中不存在的文件夹没有被完全清除,而Windows相信你只是失去了访问权(即使你是pipe理员)。 当从主要合并开发,git客户端试图访问该文件夹。 没有访问权限,它返回提到的错误。

  • 从一个分支切换到最新可以解决问题,然后返回主(仔细检查文件夹/文件是否实际上是本地删除)。
  • closures客户端和/或您的编辑器不能解决问题!
  • 重新启动帮助,但是浪费时间(恕我直言)

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

shell脚本应该一致地工作并且可以被更新; 所以我在同一个Git项目中跟踪脚本的代码。

shell脚本运行一个可执行文件,然后允许该可执行文件运行; 所以脚本还在运行; 所以我的shell仍然有脚本打开; 所以它被locking。

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

如果您打开了Meld合并工具 ,请closures该工具 。 它阻止文件覆盖。

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