web-dev-qa-db-ja.com

Gitプッシュエラー:古いリンクを解除できません(許可が拒否されました)

リモートサーバーには、リポジトリのgitチェックアウトを行うために受信後フックを設定しています。

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

しかし、ローカルマシンからサーバーのgitリポジトリにプッシュを行うと、次のエラーメッセージが表示されます。

remote: error: unable to unlink old '<file>' (Permission denied)

これは何度も発生し、ほぼすべてのファイルに対して1つのエラーメッセージが表示されます。

ただし、gitを使用して変更できるREADME.txtファイルがあります。その権限は次のとおりです。

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

しかし、まったく同じ所有者と同じ許可を持つ他のファイルは、私にそのエラーを与えます。

別のWebサイトの別のローカルリポジトリには、所有者としてローカルマシンのユーザー名を持つファイルがあり、リモートサーバーにプッシュすると、ファイルのリモートサーバー所有者が尊重され、チャームのように機能します。

明らかにそれはパーミッション関連のエラーのようですが、私はそれを修正する方法を見つけることができません、何か提案はありますか?

163
rfc1484

ファイルのリンクを解除する必要がある場合、ディレクトリのアクセス許可 'w'が必要です。このファイルでは、ファイルではなく...

283
Jan Marek
Sudo chmod -R ug+w .;

このコマンドは問題を修正します。フォルダーへの書き込み許可を与えます。

IDEを使用している場合、問題はおそらくファイルが何らかのプロセスで使用されていることです。 Tomcatがファイルを使用している可能性があります。その特定のプロセスを特定し、閉じてみてください。これで問題が解決するはずです。

私は同じ問題を抱えていましたが、上記の解決策はどれもうまくいきませんでした。問題のフォルダーを削除しました。次に:

git reset --hard

残っているファイルを削除してgitステータスをクリーンアップしてから、次を実行しました。

git pull

ようやく機能しました。

注:たとえば、フォルダーがビルドファイルのあるパブリックフォルダーである場合は、必ずファイルを再構築してください

8
wcyn

FWIW-同様の問題があり、これがそれを緩和したかどうかはわかりません(アクセス許可modを超えて):この問題でブランチを使用していたEclipseを閉じます。

5
cellepo

これは古い質問ですが、これはMacユーザーに役立つかもしれません。

Time Machineからファイルを手動でコピーする場合、Time Machineを使用してファイルを復元する代わりに、すべてに ACLs を追加します。これにより、アクセス権が台無しになります。

たとえば、「 この記事 」の「Mac OS Xファイルのアクセス権を修正する方法」というセクションには、「全員」がカスタムアクセス権を持っていることが示されています。

Bad permissions, from http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

これらのディレクトリ/ファイルからACLを削除する必要があります。 このスーパーユーザーの回答 に入りますが、コマンドは次のとおりです。

Sudo chmod -RN .

その後、ディレクトリとファイルに適切な権限があることを確認できます。ディレクトリには750を、ファイルには644を使用します。

3
kylesimmonds

私は問題がフォルダの所有権にあると思うので、現在のユーザーの所有権に設定してください

Sudo chown -R your_login_name /path/to/folder
2
Soumitra Sarkar
git reset --hard

私のために働いた

2
kreker

(Intellijで)サーバーを実行しているときに、このエラーとその他の奇妙なgitエラーが発生します。サーバーを停止してgitコマンドを再試行すると、頻繁に修正されます。

2
Phil Carter

引っ張ると、ローカルな変更が発生する場合があります。

追跡されていないファイルを追加します。

git add。

Stashの変更。

git stash

ローカルの変更を削除します。

git stashドロップ

須藤許可でプル

Sudo git pullリモートブランチ

1
user2858738

一部のファイルは、gitでさえ上書きできない書き込み保護されています。フォルダのアクセス許可を変更して、書き込みなどを許可します。 sudo chmod 775フォルダー名

そして、再びgit pull

1
Carmela

また、ルートディレクトリ自体の許可を必ず確認してください。

あなたは見つけるかもしれません:

drwxr-xr-x  9 not-you www-data  4096 Aug  8 16:36 ./
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 README.txt
-rw-r--r--  1     you www-data  3012 Aug  8 16:36 UPDATE.txt

「許可が拒否されました」というエラーが表示されます。

0
cadavre