Linux環境でのGit pullはファイルの所有者を変更します


12

なぜ私が実行するたびに git pullライブサーバーでに、ファイルの所有者が変更されるのはなぜですか?私は手動でやっていchown john:john index.phpます。

を行うgit pullと、ファイルの所有者が自動的に維持されるように、何を変更する必要がありますjohnか?


1
john、現在のディレクトリの所有者は?
user000001 14

はい、johnはディレクトリの所有者です:)
PinoyStackOverflower 14

1
どのユーザーが実行中git pullですか?
cuonglm

@Gnouc rootユーザー、SSHを介してrootユーザーとしてライブサーバーにログインしています:)
PinoyStackOverflower 14

回答:


11

git pull(これはに相当git fetch; git merge)を使用すると、gitは所有者を変更せずにファイルを更新します(gitはその情報を保存しません)。ただし、作成する新しいファイルがある場合、現在のユーザーが所有者として設定されます。

これを解決する別の解決策があります。おそらく、post-update.git/hooksディレクトリに)フックを追加して、chown john:john . -Rマージ/プル後に自動的に呼び出すようにするのがおそらく簡単です(例については、そのSOソリューションを参照)。

代替ソリューションは次のとおりです。

  • git pullルートの代わりにjohnユーザーとして実行します(.gitディレクトリのjohnへの書き込み権限が必要です)。
  • フックを作成してデプロイメントを作成します。これは、ユーザーとしてjohnを使用するか、更新後にchownを実行します(したがって、ベアリポジトリのフックgit pull内で実行する必要がありますpost-receive)。

git fetchrootとして、次にgit mergeユーザーjohnとして実行するとどうなりますか?johnは引き続き.gitディレクトリの書き込み権限を必要としますか?
ワイルドカード

はい、ほとんどの場合。git fetchルートとして、.git / objects`の新しいファイルは所有者としてルートを持つ場合があります。git mergeユーザーjohnが(ほとんどの場合)少なくとも(.git/indexおよび.git/HEAD変更するたびに削除/作成される可能性がある)上書きを試み、いくつかのファイルをに書き込みます.git/objects/。+作業ディレクトリ内の新しいファイル。たとえば、早送りマージには例外があるかもしれません。
アセナー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.