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编辑器来解决问题。
错误重现:
- 在分支B中,创build一个md文件,使用Atom编辑它,保存并提交。
- 切换到分支A,从服务器拉下新的提交。
- 尝试切换回来,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进程为我解决了这个问题。