46

私たちのワークフローは、ローカル マシンで開発し、変更を中央リポジトリにコミットしてから、必要なリポジトリのブランチをチェックアウトします。

問題は、チェックアウトを行うユーザーに応じて、Git がチェックアウトするファイルの所有権やファイルのアクセス許可を変更することです。これの直接的な結果は、Git がファイルの所有権を webroot で Git プルを実行した人に変更するため、チェックアウト後に CSS ファイルが読み取れなくなることです。

例:

  • 変更前git pull:style.css所有者user_a:group_a
  • 変更後git pull:style.css所有者user_b:user_b

として所有権を保持したいuser_a:group_a。チームの 1 人がファイルに変更を加えるたびにログインして、所有権を元の構成に戻す必要はありません。

他の人はこれにどのように対処しますか?複数のユーザーが使用するリポジトリをどのように処理しますか。システムに suphp があり、削除できません。

4

5 に答える 5

41

Gitはファイルのアクセス許可や所有権を変更しません。それは(ほとんど)それも保存しないというだけで、リポジトリには存在しないので、ユーザーが持っているものに変更されます。他のファイル作成と同じように。

Gitは、実行可能ビットオンと実行可能ビットオフの2つのパーミッションセットをサポートしています。他には何もありません。所有権情報は一切保存されません。

このスレッドを参照してください-「特定の権限が必要な場合は、手動で行う必要があります。」

いくつかの解決策が提案されています。別のツールを使用してそれを行うか、ユーザーアカウントとumaskの適切な組み合わせを使用してデフォルトで適切に設定するか、自分でgitフックを記述してそれを行うことができます。チェックアウトを行うユーザーにフックをインストールする必要があります。

@ikkeがコメントで述べたように、Gitは実際にはデプロイメントツールではないため、そのように使用しないでください。ソースコードのバージョン管理システムです。

于 2013-01-28T07:12:20.470 に答える
15

私にとって最善の解決策は、アクセス許可を修正するシェル スクリプトを作成することでした。例えば:

.git/hooks/post-checkout:

#!/bin/sh
chmod +x  tools/*

ところで、チェックアウトは、git がパーミッションを台無しにする唯一のケースではありません。それはプルするときでもあります。それを.git/hooks/post-mergeフックで処理します。

理想的には、レポ内のどこか (例: tools/fixpermissions.sh) でアクセス許可を修正するシェル スクリプトを作成し、両方のフックで呼び出すことができます。そのファイルのパーミッションを手動で変更することを忘れないでください;)

#!/bin/sh
chmod a+x tools/fixpermissions.sh
tools/fixpermissions.sh
于 2013-08-15T12:45:13.767 に答える
3

最も簡単な解決策は、gitをとして実行することuser_aです。

于 2013-01-28T07:53:15.927 に答える
0

私はよく実行します

git checkout -f file.xml

...継続的に変更して通常の状態に戻したいため、world-write パーミッションを持つバージョン管理されたfile.xmlで。

しかし、それは権限をリセットします。少し長いバージョン:

git show HEAD:./file.xml > ./file.xml

内容をリセットするだけです。

于 2014-03-28T19:00:42.503 に答える