5

この git プロジェクトに関わっているのは私だけです。ローカルの Ubuntu リポジトリでファイルを編集し、Bitbucket にプッシュして本番リポジトリにプルするたびに、編集したファイルが git によって -rwxrwxr-x 775 に変更されます。Apache はこれを好みません。

ローカル システム: Ubuntu Linux 上の git バージョン 1.8.1.2

本番システム: CentOS/Red Hat Linux 上の git バージョン 1.7.12

アクセス許可を 755 に修正したら、

git diff

また

git diff -p

それは何も示していません。

私のローカル リポジトリでは、パーミッションは 755 で、ファイルはすべて haws が所有しています。私の本番リポジトリでは、他のすべてのパーミッションは 755 のままで、contact.php を含むすべてのファイルは私のユーザー名によって所有されています。

ローカル リポジトリと本番リポジトリの両方で、この動作を停止するために次のように core.filemode を変更しました。

core.filemode = false

共同プロジェクトでこのような謎があったので、何が起こっているのかを知りたいです.

  1. このファイルのアクセス許可を変更する git の理由を確認するにはどうすればよいですか?
  2. どうすればgitに変更をやめさせることができますか?

ここでも解決策を見つけようとしました:プル時に Git がパーミッションを変更して無駄になるのを防ぎます。

私の最終的な解決策(VonCのガイダンスに感謝):

  1. VonC の適切な説明のおかげで、サーバーにログインするたびに umask が 0002 に戻っていたことを勇気づけられました。設定する Linux ホスト

    umask 0022

または記号表記を使用する(少し付加価値がある場合)

umask u=a,g-w,o-w 

また

umask u=a,go-w 

(ユーザーにはすべての権限を許可し、グループなどには書き込み権限を許可しない)

それは私の問題を解決しました。

  1. 以前に git config core.sharedRepository true を設定していましたが、それは私の問題ではなく、問題が解決したら設定を削除しました。
4

1 に答える 1

8

フックで git pull を使用する場合の間違ったファイル許可」で述べたように

Git は、実行可能なビットを除いて、アクセス許可を保存しません。そのため、チェックアウト時に、 umask
に依存するデフォルトのパーミッションでファイルが作成されます。

あなたの場合:umask 0022引っ張っているときに設定する必要があります。(これは、「プル時に Git がパーミッションを変更
できないようにする」という回答で言及したことです)

これは、ターゲット リポジトリに次のような構成があることを前提としています。

git config core.sharedRepository true

他の解決策は、「マシン上の複数のユーザーと Git リポジトリを共有するにはどうすればよいですか?」に記載されています。

git init --shared=0022

OP Tom Hawsはコメントに次のように追加します。

sharedRepositoryそのリポジトリの構成にエントリがない場合でも、クライアントの本番サーバーで git がファイルのアクセス許可を変更せずにプルできる理由を知っていますか?

おそらく、umask がデフォルトで0022既にに設定されているためです。つまり、デフォルトでは、git シェルumaskはシステムの を継承しています。
を変更するには、親プロセスのを取得する代わりに、それを考慮するように を設定するumask必要があります。 それ、またはレポがで作成されたためです。core.sharedRepositorytrueumask
--shared=0022

umask(システム全体またはユーザー全体で) 設定する方法については、「システム全体で を設定する方法」を参照してくださいumask

umaskgit コマンド (値を継承する) の直前を確認するには、次のように入力します。

umask
于 2013-08-27T05:31:49.247 に答える