git rebase:「エラー: 'ファイル'を統計できません:権限が拒否されました」


342

私はgitを使用していて、小さなコミットを作成してから大きなコミットを作成しました。を使用git rebaseして、2つのコミットをプッシュする前に一緒に押しつぶすことにしました。(私はこれを以前にやったことがありません。)

だから私はしました:

git rebase -i HEAD~2

これにより、編集者に、以前のコミットを選択し、後のコミットをスカッシュすることを選択しました。私が保存したとき、gitは言った:

エラー: ' filename 'を統計できません:権限が拒否されました

後でコミットするためにsha1を適用できませんでした... そのコミットの最初のテキスト行

今:

  • どちらのコミットも表示されませんgit log
  • git status 「現在、どのブランチにもいません」と私に伝えます。
  • 1つのファイルは変更済みとしてインデックスにリストされ、2つのファイルは追跡されていないものとしてリストされます。私の最初のコミットには1つのファイルしかなかったと思いますが(2つ目)、2番目のコミットには十分な数のファイルがありました。

どうした!?どうすれば修正できますか?


10
あなたは、たまたま、Windowsでgitを使用していますか?
CBベイリー

はい。コマンドはDOSウィンドウで実行します。
Ryan Lundy、

2
ウイルスチェッカーを実行していますか?品質の悪いウイルスチェッカープログラムがこのような問題を引き起こすことがあります。
グレッグヒューギル

53
私はgitチェックアウトに問題がありましたが(受け入れられた回答で提案されているように中止はできません)、すべてのIDEを閉じると問題が解決しました。2番目の回答は承認されたものである必要があります。
プラス

1
@IanGrainger、あなたが参照している回答は、承認された回答の8か月後に投稿されました。すべての質問に対する承認済みの回答を変更する可能性があるために、数か月ごとにすべての質問にアクセスする必要がありますか?投票ボタンは理由があります。最も賛成された回答が受け入れられた回答よりも役立つ場合は、それを使用してください。誰があなたを止めていますか?しかし、私はそれが私を助けるので私がした答えを受け入れました、そして私は質問をした人です。
Ryan Lundy

回答:


195

私はこれまでWindowsでこのエラーを見たことがありません。それが意味することは、パッチを適用しようとしたときに、gitがファイルを変更するのをブロックしたことです。

Windowsは、本当に必要ではないときにプロセスにファイルへの排他的アクセスを与える傾向があります。以前は、ウイルスチェッカーが疑いの原因の1つでしたが、これを決定的に証明したことはありません。

おそらく、最も簡単な方法は、中止してもう一度試すことです。次回はそれが起こらないことを期待しています。

git rebase --abort

git applyコミットする前にgitが実際に何をしようとしていたかを知ることができますgit rebase --continueが、正直言ってこれはお勧めしません。私がこれを試したのを見たほとんどの場合、偶然に何かが見落とされたり、めちゃくちゃになったりする可能性は偶数よりも優れています。


6
@Kyralessa:うーん、再起動してみましたか?何かがそのファイルを永続的にロックしている場合は、再起動(またはファイルを解放する少し緩やかなもの)した後、git checkout -- previously-locked-fileバックアップして実行できるはずです。
CBベイリー

51
まあ、何が起こったのか正確にはまだわかりませんが、私が知ることができる限り、VS 2010はファイルをロックしていました(.xml docファイルだったので奇妙です)。プロセスエクスプローラーはそのファイルをロックしているものを何も検出しませんでしたが、VSを終了した後git checkout、ファイルを元に戻す(git status削除された)ために使用でき、リベース/スカッシュしようとする前の状態に戻りました。たぶん、もう一度やり直した方がいいかもしれませんが、この時点では少し不安になります。
Ryan Lundy、

3
フォローアップ、多くの月が後で:私はこの問題を再び抱えていません。インタラクティブなリベースも含め、リベースはうまく機能しています。それは一時的なVSファイルロックの不具合だったに違いありません。
ライアンランディ

49
Visual Studio 2010を閉じることで修正されました
Trev

4
Atomはファイルをロックしているようです。再起動して修正しました。
Augustin Bralley 2017年

651

エディター、エクスプローラーウィンドウ、コマンドプロンプト、FTPプログラムなど、フォルダーが開いているプログラムをすべて閉じてみてください。これにより、Windowsでの問題が常に修正されます。


72
同じエラーが発生しました。私はビジュアルスタジオを閉じただけで、すべてがうまくいきました。
jacobsimeon、2012年

6
WinLESS LESS-> CSSコンバーターがバックグラウンドに隠れているのを思い出す前に、考えられるすべてのことを閉じました。
Michael Martin-Smucker

6
マージしようとすると、Visual Studioがnugetパッケージをロックしました。VSを閉じるとうまくいきました。
CodeHxr 2012年

7
Windowsで見たこのエラーの最も一般的な原因は、Visual Studioがファイルをロックしていることです。規定どおり、ブランチの切り替え、マージなどの前にVSを閉じます
longda

5
「私も」アトムの答え。ファイルとディレクトリをロックしているようです。それを閉じると問題が修正されます。
ajm 2015

277

IDE(VISUAL STUDIO / ATOMなど)を閉じるだけです。うまくいくかもしれません


1
IntelliJでは、実行中のTomcatサービスを停止することがうまくいきました。IDEを再起動するよりも少し簡単です。
Phil Carter

また、Git Bashのウィンドウを開いていました。閉じるとうまくいきました。
Vince I

それの価値があるIDEは、リポジトリに何もロックしてはいけません...いいね
LightCC、

vsコードで動作
Muhammed Moussa

Windows 10でAtomを使用して一時的なブランチにチェックアウトした後、この問題に遭遇しました。Atomを閉じて再度開くと、問題が解決しました。
mickburkejnr

24

私のマシンでこれを見ると、「一部のプロセスでファイルが開かれている」だけではありません。ファイルの実際の所有権は、私(管理者として実行中)が再起動後にのみアクセスできるところまで達します。

IISは問題の一部です。変更する多くのファイルを必要とする2つの主要なブランチを切り替えると、IISが何かを実行しようとしているときに、gitはファイルまたはディレクトリ(通常はDLL)を削除します。この時点で、IISプロセスはディスク上のファイルを、ロックされていて誰も所有していないように見えるバージョンで自動的に上書きします。

この時点でIISを停止しても機能しません。私が知っている最善の方法は、再起動することです。また、将来、主要なブランチ間で変更する前にIISを停止することを忘れないでください。

これで問題が解決するわけではありませんが、他の人に役立つかもしれません。


こんにちは、マイク...まったく同じ問題が発生していますが、突然発生しました。IISを実行している多くのプロジェクトで同じプロセスを使用しており、問題は発生していません。しかし、ある日、それが起こり始めます...困惑し、イライラします。これを書いてから、もう学びましたか?
イーサンブラウン

洞察力をありがとうMike-私の場合、ASP.NET MVCプロジェクトで古いブランチをチェックアウトすると、以前のブランチとは異なるバインディングURLがあり、Visual Studioが原因でIISがプロジェクト内のいくつかのファイルをロックしました。IISで適切なアプリプールを停止すると、ロックが解除されました。
fundead 2015年

IISも私にとって犯人でした。これがポップアップするとiisreset、ファイルのロックが解除されるようです。
alexm 2016

OneDriveでも同じことが発生することがわかりました
。OneDriveに

これはwin10でも発生し、再起動が必要でしたが、iisresetソリューションのテストは行いませんでした。
qdread

17

Windowsでは、これらのファイルをブロックするTortoiseGITプロセスである可能性があります。タスクマネージャーを開き、プロセスTGitCache.exeを終了します。


2
知っておくと良いのですが、私の場合はTortoiseGitを使用していません。コマンドラインを使用するだけです。
Ryan Lundy

13

私はこの答えのスレッドに偶然出会いました-このエラーはそのような偽のエラーです。

それが私が得たすべてです-マージしようとするとき。私はいくつかの答えを読んだ後、気づきました-たまたまAtomであるコードエディターを閉じるだけでした。

エディターを閉じたら、もう一度「git merge」を実行してブームしましたが、うまくいきました。

どのような無意味なエラー:(


ありがとうございました!毎日ではありませんが、リストの下に「正しい」答えが表示されます。これを正解としてマークすることをお勧めします。現在の操作を中止するのではなく、実際の問題を解決することは理にかなっています。
Nikhil Kuriakose 16

12

vscodeを使用している場合は、ターミナルを終了して新しいターミナルを開きます。そうでなければ多分ターミナルも閉じる


これは、プロセスのロックまたは何かのように見えました
Mike Upjohn

10

これはWindowsで時々起こります

エラー: 'ファイル名'をstatできません:権限が拒否されました

ほとんどの場合、ビットbashの複数のインスタンスを開いており、git bashインスタンスの1つは、プル元のリモートブランチに存在しないディレクトリにあります。

git bashの1つのインスタンスを除くすべてを閉じると、問題が解決します。


9

使用しているIDE(使用している場合)も邪魔になっている可能性があります。それがQtCreatorを使用しているときに私に起こったことです。


これは私がPhpStormを使用した場合に当てはまりました。再起動するとエラーが修正されました。
lancemonotone

7

Win 10でSourceTreeを使用して、Atomエディターを閉じることで問題を修正しました。

エラー再現:

  1. ブランチBで、mdファイルを作成し、Atomを使用して編集し、保存してコミットします。
  2. ブランチAに切り替え、サーバーから新しいコミットをプルダウンします。
  3. もう一度切り替えてみてください、Ops、「エラー:統計 'ファイル'を行えません:権限が拒否されました」と表示されます。

6

これは、SublimeTextを使用していて、プログラムの購入を求めるポップアップウィンドウが閉じていない場合にも発生する可能性があります。


1
また、プロジェクト/ファイルツリーを開くだけで、Atomでそれを手に入れました
Hal

1
@Halと同様に、私の問題はAtomに関するものでした。あるブランチのフォルダが別のブランチになかったためです。Atomを閉じると修正されますが、プロジェクトツリーを折りたたんで(フォルダーを非表示にする)もできます。これも機能します。
jsalwen 2016

6

これは、PreprosやCodekitなど、プロジェクトを監視する前処理ソフトウェア/アプリケーションがある場合によく発生します。また、AtomとSublime(さらにはNotepad ++)は、プロジェクト内のファイルが現在編集されている場合に、これを引き起こす可能性があります。

この問題を回避する最も簡単な方法は、開いているプロジェクトファイルをすべて閉じ、ブランチをマージしてから、それらを再度開いて更新することです。これにより、発生した変更がプログラムで認識されなくなり、プロジェクトを手動で更新する必要が生じる問題も回避されます。


1
男!elm-liveをバックグラウンドで実行していました。これは私に頭痛のトンを救いました。
霜降りの素晴らしい

6

webpackを実行している場合はシャットダウンしてください。IDEもシャットダウンします。それらのことを行った後、正常に動作するはずです。


4

同様の問題がありました。しかし、解決は非常に簡単でした。Windowsマシンでは、ファイルエクスプローラーで、1つのブランチに存在するがチェックアウトした他のブランチには存在しないフォルダーが開いていました。ファイルエクスプローラーを閉じると問題が解決しました。


4

私はこれをWin 7で使用したばかりです。

$ git stash pop error:cannot stat 'parentFolder / subfolder':Permission denied error:cannot stat 'parentFolder / subfolder':Permission denied

診断:

1>サブフォルダに移動したところ、そこにあり、削除できませんでした。

2>「プロセスエクスプローラ」を使用->検索->ハンドルとDLLを検索->「サブフォルダ」の名前をそこに入力して検索します。

結果:それは、XMLSpyがそこでxmlの1つを開いたことがわかり、XML Spyを閉じてstash popを再試行します。これは現在機能しています。


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のプロセスを。これを行った後、私は再びgitbashで実行することができました:

git pull

そして「cannot stat filename」エラーが消えた。おそらく、Visual Studioの拡張機能が原因で、プロセスを閉じた後でもプロセスを開いたままにしておくことが原因です。


2

この問題が発生しました。問題は、ファイルを開いていた場合、リベース後に削除/置換された(このファイルを持たないブランチがあった)場合、gitシステムが破損することです。だから私は開いているすべてのファイルを閉じてから、他のブランチをチェックアウトしようとしました


2

ディレクトリをロックしている可能性のあるすべてのアプリを閉じるのではなく、他のほぼすべての答えが言うように別の解決策は、すべてを閉じずにファイル/ディレクトリのロックを解除するユーティリティを使用することです。(Visual Studioを再起動する必要はありません)

LockHunterは私が使用しているものです:https ://lockhunter.com/ 他にもおそらく他にもありますが、これは私にとってはうまくいきました。


1

Windows 10 64ビットで同じ問題、Git Bashバージョン2.9.0.windows1を実行しているAtomをエディターとして使用。

これは私にとってはうまくいきました:Windows Defenderの除外対象にGitソフトウェアフォルダー(私にとってはC:\ Program Files \ Git)を追加しました。

除外が追加された後、git checkout 'file'正常に動作しました。


1

このエラーは、以前のgitアクションのためにファイルがまだ「ロック」されていることが原因で発生する場合もあります。これは、Windowsファイルシステムレイヤーの動作に関係しています。私はかつてこれについて素晴らしい説明を読みましたが、どこで思い出せないのですか。

ただし、その場合は基本的に競合状態であるため、中断したリベースプロセスを続行するだけで済みます。残念ながらこれはいつも私に起こりますので、リベースを続行するためにこの少し危険なヘルパーを書きました:

#!/bin/sh

set -e

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

さらに確実にしたい場合は、を使用git rebase --edit-todoして、次に適用するコミットが実際に適用に失敗したものかどうかを確認できます。git clean -dn重要なファイルを削除しないようにするために使用します。


1

Windowsでphotoshopを使用しているときに発生した問題:画像を保存してからブランチに切り替えたとき(画像を開いたままphotoshopを開いたまま)、gitエラーが発生しました。フォトショップで画像を閉じて、再試行してください



1

リポジトリに関連するw3wp.exeプロセスを強制終了すると、これが修正されました。



0

VS1013が8.1をターゲットとするブランチ上にあり、8.0ブランチをチェックアウトしようとしたときにこのエラーが発生しました。VSにタブで戻り、UpdateAllを許可する必要がありました。その後、エラーなしで8.0ブランチをチェックアウトできました。


0

同じエラーが発生したとき、Git Shellを使用しているWindowsマシンにもいました。

しかし、当時は複数のGitターミナルを開いていました。

最初の端末は上記で投稿したエラーを受け取り、他の端末は以前にgrunt serveyeomanから端末コマンドを実行していました(以下にリンクされています)。2番目のターミナルは、ローカルサーバーインスタンスをホストするために開いたままにする必要がありました。

進行中のプロセスを実行しているすべてのターミナルウィンドウをシャットダウンすると、エラーが発生しなくなる可能性があります。

少なくともそれが私にとってはうまくいった。2番目のターミナルウィンドウをシャットダウンした後、さまざまなブランチを簡単にチェックアウトしてファイルを操作できました。

Grunt Serve Command-Yeoman.I / O
http://yeoman.io/learning/


0

この問題に遭遇しました。ここでの答えのどれも私のためにこれを解決することはありませんでした。

結局、私がブランチに追加したnugetパッケージになりましたが、マスターブランチに切り替えると、存在しないように見えました。マージを実行すると、newtonsoft ... xmlがstatできなかったと表示されます。問題のファイルに移動して開きますが、Windowsはファイルを見つけることができないというエラーを返しました(たとえそれを正しく見ていても)。

これを解決する方法は、ファイルを右クリックして削除し(機能しましたが、Windowsがファイルを見つけられなかったため、ファイルを開くことができませんでした???)、もう一度マージしてみて問題を解決しました。

非常に奇妙な。

これが後で誰かを助けることを願っています。


0

プロジェクトディレクトリにアクセスしていたテキストエディターを終了し、masterブランチにマージしてみました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.