2012-06-27 14 views
18

gitを使用してサーバー上のWebサイトを管理しています。サーバーにプッシュするとGitがファイルのアクセス権を変更しています

私は、Apacheの前にレポを指すようにpost-receiveを使用してサーバ上の裸のリポジトリを有する

[email protected]:myapp$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' 
total 16 
755 [email protected] 18 thomas staff 612 Jun 13 15:35 application 
755 [email protected] 11 thomas staff 374 Jun 12 16:25 assets 
644 [email protected] 1 thomas staff 6399 Jun 22 11:45 index.php 
755 [email protected] 10 thomas staff 340 May 14 15:22 system 

下に示すローカルリポジトリを有します。 Apacheのpublicフォルダの内容は、以下のとおりです。

[email protected]:/srv/public/myapp# ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' 
total 20 
700 drwx------ 15 root root 4096 Jun 27 11:31 application 
700 drwx------ 10 root root 4096 Jun 27 11:31 assets 
600 -rw------- 1 root root 6399 Jun 27 11:31 index.php 
700 drwx------ 8 root root 4096 Jun 27 11:31 system 

これは、Webサーバー上のコードに害を及ぼす原因となります。

どうすればこの問題を解決できますか?私はそれが何か違いがあれば、gitoliteを使っています。

のgitサーバーの設定ファイル

[core] 
     repositoryformatversion = 0 
     filemode = true 
     bare = true 
+2

あなたは/ srvの/ myappに/公共のレポを作成するために使用するユーザーのumaskを確認しましたか? git configには何が入っていますか?ファイルモードに関連するものはすべて変更されましたか? – bcelary

+0

私はファイルモードを使いこなしていましたが、それは一点で作業していましたが、今は「真」です。 "unmask"が何であるかは不明です。私はgitoliteでセットアップしたgitユーザーを持っています。私はポストを更新しました。 – ThomasReggi

+0

[この質問](http://stackoverflow.com/questions/1071241/how-does-git-handle-folder-permission)を参照してください。 – vergenzt

答えて

19

This thread post非常に良い説明を提供しています:

これは仕様によるものです。 gitのデータ構造は技術的には木の中に というUNIXモードのビットを格納することができますが、gitの履歴 では、単純な実行可能なビットを超えて何かを尊重すると、 のgitの通常の使用例 またはリポジトリ内の他の共有ファイル)。

ファイルモードを考慮して設定オプションを追加することもできますが、通常は価値がないと思われる があります。これは、 一般的なメタデータの問題の一部だけを解決します。これは所有者とグループの名前またはIDを省略するため、 とACLのような拡張メタデータです。

  1. は、ファイルのパーミッションを保存し、復元しますgitのフックから呼び出すことができる「メタストア」、および のようなツールを使用します。モードはあなたに重要な場合

    、提案の修正は次のいずれかですファイルは で追跡されます。このようなツールを使用する場合、ファイル保護の条件は です(gitはファイルを 644として作成し、それからMetastoreはそれを600に修正します;その間に 誰かがあなたのファイルを読むことができます)。

  2. あなたが保存している正確に何によっては、それがアクセス権によって保護され、別のディレクトリに リポジトリを維持するために意味をなすことができ、 はその後、彼らの究極の場所にリポジトリ からファイルを展開する別のツールを使用します(例えば、Makefileまたは他のインストールツール )。

+4

Web上にあるので、永続的なアクセス許可が必要です。私はpost-receiveフックに行を追加して、作業ディレクトリ(裸のリポジトリではない)のすべてのファイルとフォルダを正しいパーミッション、フォルダ '755'とファイル' 644'に変更することができます。 – ThomasReggi

+2

それがあなたのニーズに合っているなら、はい。重要な点は、Gitはあなたのためにそれをしないということです。特定の権限が必要な場合は、手動で行う必要があります。 – vergenzt

+1

@ThomasReggi Gitからファイルを引き出すように、新しいファイルが作成されたときに、755と644を適用するために.profileスクリプトに 'umask 022'を設定することができます –

関連する問題