Gitチェックアウトの警告:ファイルのリンクを解除できません。権限が拒否されました


109

「リンクを解除できません」という警告に関連してgitについて同様の問題があることは承知していますが、使用できませんでした。

主な違いは、これはサブモジュールをまったく扱っていないときに発生したことです(これまでにサブモジュールを扱ったことはありません)。「アップグレード」というブランチを作成し、古いフレームワークファイルを削除して、新しいフレームワークファイルにコピーしました。私はgit add -Aを使用してから、すべてをコミットしました。トランクブランチをチェックアウトしようとすると、次のエラーが返されました。

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

...等。それらの数百があります。

最初は、これは単に権限の問題だと思っていたので、要件ディレクトリ全体にグループ書き込み権限を再帰的に追加しましたが、変更はありませんでした。

編集:以下の回答で提案されているように、私は同じことをしようとしましたが、他はすべて閉じました。私にはこれまで以上に運がありませんでした。

通常の開発に戻るためにトランクに移動できないため、この問題は特に衰弱させます。



9
シンプルで解決しましたsudo chown -R username directory
Stephen Corwin

回答:


84

通常、これらのファイルのハンドルを解放しないプロセスがあると、この種のエラーが発生します。

何も実行されていないことを確認してから、チェックアウトを再試行してください。

注:これは、Gitのインストール方法にも関連している可能性があります(Windowsでは、msysgitがC:\ProgramまたはC:\Program Filesにインストールされている場合、UACで問題が発生する可能性があります。「msysgit-sh.exe-fork:Permission denied-Vista 64 bit」とコメント2を参照してください第437号

注:以下示すように、問題の一般的なその他の原因は、リンク解除できないファイルではなく、ディレクトリ(所有者の誤り)の権利の問題です。


1
私はそれを片付けるためにUbuntuにいます。そして残念なことに、私はこのWebブラウザーとコンソールにしかいません。コンソールには1つのタブが関連ディレクトリに開かれています(2つは他の場所に開かれています)。
Paragon、2011

3
@パラゴン:UNIXでも、問題を処理することができます。それ以外の場合、これは何らかの許可の問題になるはずです。ただし、チェックアウトを強制できるはずです。git checkout -f master
VonC、2011

2
私の場合、+ 1は、アクティブなVMとのフォルダー共有で、ホストシステムのgitにあるファイルの破棄を禁止していました。私を狂わせたので、ヒントをありがとう!
ジョーク2013

1
同じ問題。実行中のプロセスエクスプローラー> Ctrl + F> <ファイル名>-このファイルを開いたままにするプロセスを表示します。
setevoy 2015

1
すべてフェッチしようとすると、GitExtensionsがこのエラーを表示しました... GitKrakenも開いていました。GitKrakenを閉じると、フェッチはすべてエラーなしで機能しました。
mkaj 2017

99

このエラーに初めて遭遇したとき、ユーザーにはファイルへの「書き込み」権限がありましたが、それを含んでいるディレクトリではありませんでした。ファイルを含むディレクトリの権限を確認してください。


94
ああ、あまりにも面白い、今日私はこの答えに出会ったばかりで、それが自分のものだと気づきました!それにもかかわらず、それは再び働きました!
Elijah Lynn

わかりました。Windows10で発生しました。メインプロジェクトフォルダーに移動します。すべての可能なユーザー、すべてのアクセス許可を追加します。したがって、システム、管理者、ユーザー、すべての可能性についてです。変更を適用します。そして、それはうまくいくようです、おそらくWindows 10のアップデートで、新しいユーザーを作成しなくても、許可なしに新しいユーザーのように脅かされています。たとえば、ラップトップのロックを解除したときに持っているログイン名ではなく、S-1-15-32 .....という名前があります。
PsychedelicSubstance

30

この場合、「リンク解除」は基本的に「ファイルの削除」を意味します。

このエラーはgit自体が原因ではありません。コマンドラインまたはファイルエクスプローラーで、これらのファイルを手動で削除すると、同様のエラーが発生するはずです。


18
このエラーに初めて遭遇したとき、ユーザーにはファイルへの「書き込み」権限がありましたが、それを含むディレクトリにはありませんでした。
Elijah Lynn

3
@エリヤ:ありがとう!それが私にとってそれでした。
ジェシーリー

4
私の場合、問題のファイルが別のアプリケーションによってロックされていることがわかりました。アプリケーションを閉じるとファイルが解放され、チェックアウトを続行できるようになりました。
Simon Tewsi 2013年

25

おそらくあなたが所有者ではないため、アクセス権がありません。

所有者を自分に変更して修正します。

sudo chown -R your_login_name /path/to/folder

2
私のローカル開発マシンでは、問題のファイルはもともと私のローカルapacheサーバーによって作成されていたため、www-dataユーザーが所有していました。それらを自分のアカウントに変更すると、すべてが再び正常に機能しました。「許可拒否」が本当の問題でした。「好きになれない」というのはただのニシンだった。
デールアンダーソン

23

drupal 7のdefault-settings.phpファイルに問題がありました。この場合、@ rtconnerが言ったように、ファイルを削除したり、元に戻したりすることができませんでした。私はこのファイルを使用するアプリケーションや何かを持っていなかった、そしてそれは最終的に許可エラーになった。

chmod 777 *フォルダに追加したところ、問題なく元に戻すことができました。


3
ただし777、どのフォルダにも必要ない場合があります。これで問題は解決しましたが、解決後すぐにデフォルトに戻しました。ありがとう!
Bram


6

OS Xマシンで「git repack」または「git gc」を実行するときはいつでも、この問題に遭遇しました。管理者権限でgitを実行しているときでも、このページhttp://hints.macworld.com /comment.php?mode=view&cid=1734

修正方法は、ターミナルを開き、gitリポジトリに移動し、.gitフォルダーにcdしてから、次のようにします。

chflags -R nouchg *

それが問題だった場合、その後、gitコマンドは通常どおり機能します。


1
macworldリンクは無効になりました。これが更新された参照です:superuser.com/a/40754
webb

4

@rtconnerが言ったように、Intellij を使用している人にとって、この問題はgitが原因ではない。IDEがロックされているため、ファイルgitはリンクを解除できません。そのため、IDEを閉じてから、コマンドラインを介してIDE(または好きなもの)をマージする必要があります。


それだけでした。AndroidStudioはIntellijであるため、Android開発で発生しました。
2013

4

これは、次の場合にも発生する可能性があります。

  1. Dockerコンテナ内でプロセス実行しました。

  2. そのプロセスによっていくつかのファイルが生成されました。

  3. ファイルの宛先は、Dockerホスト上のボリュームとしてマウントされます。

  4. gitDockerホストで実行しています。


この場合は、コミットして実行するファイルをステージングします。

git diff --name-only --cached | xargs ls -l 

上記の基準を満たすファイルには、次の接頭辞が付けられます。

-rw-r--r-- 1 root root ...

それらは所有されroot、書き込み可能ではありません。これは良くありません。その実行を修正するには:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

クリーナー液は、おそらく使用することです--user、オプションを参照してくださいドッカーためにこれをしてドッカーのコンためにこれ


2

私の場合、それはウィンドウでチェックアウトするためにgitリポジトリを準備するフォルダ名の「:」文字でした。


2

Macのターミナルで私はこれをします

sudo gitチェックアウト。(すべてをクリーンアップする)

その後

sudo git pull origin


2

実行しようとしたときに、Ubuntuを実行している仮想マシン内でこのエラーが発生しましたgit reset --hard

修正は単にgit reset --hardOS Xホストマシンから実行することでした。


1

他の提案はどれもうまくいきませんでしたが、これはうまくいきました:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive


1

私の場合、私のWindowsディレクトリはDropboxフォルダの下にあります。これはGit固有の問題ではありません。ファイル(この場合はロックファイル)が作成された直後、Dropboxが同期を実行するのにもう1秒かかります。その間、ファイルはDropboxによって使用されており、サードパーティのプログラム(この場合はGit)はファイルを削除できません。

私の解決策は、Dropboxを終了して、Dropboxのファイル同期の舞台裏の魔法を回避することです。


0

このエラーが発生しました。これは、ファイル/フォルダーの誤った「所有者/グループ」が原因です。このファイル/フォルダーの「所有者/グループ」を変更し、「git pull」を使用して再試行するには、サーバー管理者に支援を求める必要があります。または、sudoerの場合は、sudo chown "your owner name / your group name"を実行して、もう一度リポジトリをプルしてみてください。試してみてください、100%機能します!


0

関連するプロセスまたはスレッドが実行されていないことを確認し、必要に応じて終了タスクまたは強制終了を実行します。

必ず所有権を変更してください。


0

これが発生した場合にだけ、一般的には、Windowsの、そしてあなたが使用しているtortoisegitを、それがの状態キャッシュであるtortoisegit。そのプロセスを強制終了すると、解放されます。


TortoiseGitのステータスキャッシュを完全に無効にすることができますが、これは一般的に推奨されることです。多くの予期しないファイルロックの原因であることがよくあり、それよりもはるかに問題が発生する傾向があります。git status代わりにコマンドラインから使用してください。

0

ユーザーをubuntuから、最初に操作した実際のユーザー名に切り替える必要がありました。それで直った。


そして、Windowsユーザーはどうですか?
Herr Nentu '2015

OPはUbuntuにありました。Windowsスレッドについてはコメントしなかったでしょう。
Marc

0

私のgitクライアント(GitExtensions)を常に管理モードで実行するように設定することで解決しました。


0

IntelliJ(14.1.3 Ultimate)を使用しているときに問題が発生したため、一部のファイルの変更を元に戻したかった。

Git Bash別のウィンドウで開いて閉じることで解決しました-別の復帰試行がIntelliJ機能しました。


0

このエラーが発生しました。Eclipseを起動してファイルを作成したときに「管理者として実行」していたため、ファイルは管理者が所有していました(フォルダーで「ls -la」を実行すると通知されます)。後でファイルを隠そうとしたとき、それはできませんでした( 'ファイルのリンクを解除できません'など)。ファイルに対してchmodを実行することが私にとっての修正でした。



0

必要なのは、アクセス許可を提供することだけです。プロジェクトのルートから以下のコマンドを実行します。

    chmod ug+w <directory path>

0

私は同じ問題を抱えていましたが、他の人が示唆したように、いくつかの代替案を試しました。

しかし、最後に.gitフォルダーに正しい権限を与えると、問題が解決します。

sudo chown -R "${USER:-$(id -un)}" .git

0

私の場合、www-data所有者として設定することで許可の問題が解決しました:

chown -R www-data project_folder_name

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