web-dev-qa-db-ja.com

git rebase: "エラー: 'file'をstatできません:パーミッションが拒否されました"

私はgitを使っていて、小さなコミットをしてから大きなコミットをしています。 2つのコミットをプッシュする前に、それらをまとめて潰すためにgit rebaseを使用することにしました。 (私はこれまでやったことがない)

だから私はしました:

git rebase -i HEAD~2

これは私に私の編集者を与えました、そこで私は以前のコミットを選び、後のコミットを潰します。私が保存したとき、gitは言いました:

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

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

今:

  • git logを実行してもコミットは表示されません。
  • git statusは私に「現在どのブランチにもいない」と言っています。
  • 1つのファイルは変更済みとして索引にリストされ、2つのファイルは未追跡としてリストされています。私の最初のコミットはたった一つのファイル(私は思う)を持っていました、そして私の二番目のコミットは良いダースを持っていました。

何が起こった!?どうやって直すの?

290
Ryan Lundy

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

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

おそらく最も簡単なことは、次回それが起こらないことを期待して、中止して再試行することです。

git rebase --abort

あなたはgit applygit rebase --continueをする前にコミットgitが実際に何をしようとしていたかの知識を使うことを試みることができますが、正直なところこれをお勧めしません。私がこれを試したのを見たことがあるほとんどの時間は偶然よりも偶然何かが偶然に見逃されるか、またはめちゃくちゃになるというチャンスがありました。

166
CB Bailey

エディタ、エクスプローラウィンドウ、コマンドプロンプト、FTPプログラムなど、フォルダを開いているプログラムをすべて閉じてみてください。これはWindows上で私にとっていつも問題を解決します。

559
Cameron Wright

IDEを閉じてください(VISUAL STUDIO/ATOMなど)。うまくいくかも

247
ManJan

私のマシンでこれを見たとき、それは単に「あるプロセスがファイルを開いている」よりも悪いです。ファイルの実際の所有権は、私(管理者として実行されている)が再起動後にのみアクセスできるようになるまでになります。

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

この時点でIISを停止しても実行されません。私がやらなければならない最良の方法は、再起動して、将来主要なブランチに変更する前にIISを停止することを忘れないでください。

私はそれが本当に質問に答えないことを知っていますが、他の人には役に立つかもしれません。

22
Mike Ruhlin

私はちょうどこの答えのスレッドにつまずいた - このエラーはそのような偽のエラーです。

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

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

なんて無意味なエラー:(

13
TheyDontHaveIT

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

12
romanlv

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

8
rgngl

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

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

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

git bashのインスタンスを1つだけ残して他のインスタンスをすべて閉じると問題は解決します

6
Crispy Ninja

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

エラー再現:

  1. ブランチBで、Atomを使用してmdファイルを作成し、保存してコミットします。
  2. ブランチAに切り替え、サーバーから新しいコミットを取得します。
  3. 「エラー: 'file'を統計できません:アクセス許可が拒否されました」と表示されます。
6
attolee

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

6
ahnbizcad

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

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

5

私はちょうどこれを勝利7の下に持っています。

$ git stash popエラー: 'parentFolder /サブフォルダ'を統計できません:アクセス許可が拒否されましたエラー: 'parentFolder /サブフォルダ'を統計処理できません:アクセスが拒否されました

診断:

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

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

結果:XMLSpyがそこにあるxmlの1つを開いてXML Spyを閉じ、再びstash popを試みたところ、問題なく動作していることがわかりました。

4
Gob00st

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

4
mmmdearte

私はこの問題を抱えています。問題は - もしあなたがファイルを開いて、リベースの後にそれが削除されたならば(あなたはもうこのファイルを持たないブランチを持っていた)、git-systemは壊れる。だから私は開いているすべてのファイルを閉じてから他のブランチでチェックアウトしようとしました

2
BlondinkaBrain

ウェブパックを実行している場合はシャットダウンしてください。 IDEもシャットダウンしてください。これらのことをした後はうまくいくはずです。

2
KennethDale1

上記の「Close Visual Studio」の回答に同意します。

ただし、Visual Studioを閉じた後でも、タスクエクスプローラで手動でkill"devenv.exe" Visual Studioプロセスを実行する必要がありました。私がこれをした後、私は再びgitbashで走ることができました:

git pull

そして、「(stat =filenameはできません」というエラーは消えました。これはおそらく、Visual Studioの拡張機能が、閉じた後もプロセスを開いたままにしていることによるものです。

2
ladygargar

私がこの問題に遭遇したのは私の編集者Intellijによるものです。内部のバージョン管理の一環として、すべての隠されたgitファイルを調べてロックしていました。 (さまざまな理由から、私はIntellijに付属のgitプラグインを使用していませんでした...)

そこで私は管理者として通常のDOSウィンドウを開き、ディレクトリに移動して実行しました。

attrib -R /S

これでファイルのロックが解除され、その後はすべてうまくいったので、GitHubウィンドウズクライアントを使って自分の変更を同期させることができた。

2
Perry Tew

中をリベースしながら、Windows上で私に起こったIntelliJ統合端末Git bashクライアントインスタンスが並行して実行されていることに気づきました。

終了Git bash問題を解決しました。

1
Louis

このエラーは、以前のgitアクションのためにファイルがまだ「ロック」されているという事実によっても発生する可能性があります。それはWindowsファイルシステム層がどのように機能するかに関係しています。私はかつてこれについてのニースの説明を読みました、しかし私はどこで覚えていません。

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

#!/bin/sh

set -e

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

さらに確実にしたい場合は、git rebase --edit-todoを使用して、次に適用されるコミットが本当に以前に適用されなかったコミットであるかどうかを確認できます。 git clean -dnを使用して、重要なファイルを削除しないようにしてください。

1
raphinesse

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

これは私のために働きました:私はWindows Defenderのための除外にGitソフトウェアフォルダー(私にとって、これはC:\ Program Files\Gitでした)を加えました。

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

1
Paul Spaven

Photoshopを使用しているときに、Windowsで表示されます。画像を保存してから(画像を開いた状態でPhotoshopを終了)ブランチに切り替えたときに、gitエラーが発生しました。フォトショップで画像を閉じて、もう一度試してください。

1
P.Scheit

リポジトリに関連するw3wp.exeプロセスを殺して私のためにこれを修正しました。

1
Ric

Meld merge tool が開いている場合は閉じてください。ファイルの上書きをブロックします。

1
user2441511

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

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

0
HotN

私はこの問題に遭遇しました。ここの答えのどれも私のためにこれを解決するために起こった。

私がブランチに追加した小さなパッケージは、いったんマスターブランチに戻ると、存在しないように見えました。一度マージしたら、newtonsoft ... xmlと言うことはできませんでした。問題のファイルに移動して開くと、ファイルが見つからないというエラーメッセージが表示されました(正しいファイルを見ていたとしても)。

私はこれを解決する方法は右クリックしてファイルを削除した(それはうまくいきましたが、Windowsがそれを見つけることができなかったので私はそれを開くことができませんでした???).

非常に奇妙な。

これが後で誰かに役立つことを願っています。

0
TheNoob

vscodeを使用している場合は、端末を終了して新しい端末を開いてください。それ以外の場合はターミナルも閉じます

0
Muhammed Moussa

私が同じエラーに遭遇したとき私もGit Shellを使っているWindowsマシンにいました。

しかし、当時私は複数のGit端末を開いていました。

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

進行中のプロセスを実行しているすべての端末ウィンドウをシャットダウンすると、エラーが消える可能性があります。

少なくともそれが私のために働いたものです。 2番目の端末ウィンドウを閉じた後は、さまざまなブランチを簡単にチェックアウトしてファイルを操作することができました。

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

0
Shawesome

Program Filesのsh.exeを右クリックし、[セキュリティ]タブで[管理者として実行]を設定することでアクセス許可の問題を解決しました。

0
o_o

私の場合、このファイルは、私の開発者のために、プロジェクトをローカルの開発サーバーにデプロイするためのシェルスクリプト(*.shファイル)です。

シェルスクリプトは一貫して機能するはずであり、更新される可能性があります。そのため、スクリプトがデプロイする予定のコードと同じGitプロジェクトで追跡しました。

シェルスクリプトは1つの実行ファイルを実行し、その実行ファイルの実行を許可します。スクリプトはまだ実行中です。だから私のシェルはまだスクリプトを開いたままにしています。だからそれはロックされています。

スクリプトを終了するためにCtrl+C 'd(これでローカルの開発サーバーにアクセスできなくなりました)、今は自由にチェックアウトできます。

0
The Red Pea

プロジェクトディレクトリにアクセスしていたテキストエディタを終了してから、masterブランチにマージしようとしましたが、うまくいきました。

0
PudparK

私の場合、私はwebpack devサーバーを動かしていました。

0
Charith

同じ問題だがSourceTree(または他のgitクライアント)を使う。答えがどれも私のケースに対応しないので私は私の答えを加えています。

ブランチを「開発」から「メイン」に変更すると、ローカルフォルダの実際のファイルとサブフォルダが変更されます。 「マスター」に存在しなかったフォルダは完全には消去されず、(あなたが管理者であっても)あなたがあなたのアクセス権を失っただけだとウィンドウズが信じていることが起こるかもしれません。 mainからマージして開発するとき、gitクライアントはフォルダにアクセスしようとします。アクセス権がないと、上記のエラーが返されます。

  • あるブランチから最新のブランチに切り替えると問題が解決し、それからマスターに戻ることができます(フォルダー/ファイルが実際にローカルに削除されているかどうかを再確認してください)。
  • クライアントやエディタを閉じてください問題は解決しません!
  • 再起動は役立ちますが時間の無駄です(IMHO)
0
Wli

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

0