5

私と私の同僚は共有のウェブサイトリポジトリを持っています。私たちは皆、Ubuntu10.04にプッシュしているWindows764ビットを使用しています。これが問題になる場合のセットアップを以下に示します。

ローカル->ハブ->ウェブサイト

ベアリポジトリであるハブにプッシュし、ハブの更新後フックを使用してWebサイトリポジトリにcdし、ハブからWebサイトに変更をプルします。これは、Webサイトがライブであり、常にチェックアウトされており、プッシュできないために行われます。

ローカルにいて、新しいフォルダ/ファイルをコミットすると、作成モードが100644で次のように表示されます。

$ git commit -a -m "testing permissions"
[master 865b809] testing permissions
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 test.php

これらの変更をリポジトリにプッシュすると、775と664が必要な場合に、フォルダが755として、ファイルが644として作成されます。ファイルを編集しているだけである限り、アクセス許可は少なくとも同じままです。唯一の問題は作成にあります。

共有リポジトリには、core.sharedrepository = 0660必要に応じて権限を設定することを意味すると思いました。また、私たちumaskの私たちの.bashrcは002に設定されています。

これが私のローカル設定です

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly

ローカルが権限を決定し、共有リポジトリに設定されているものを無視しているようです。作成モードを100664にするにはどうすればよいですか。

編集

ハブ構成

[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 0660
[receive]
denyNonFastforwards = true

ウェブサイトの設定

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
sharedrepository = 1
[receive]
denyNonFastforwards = true

EDIT2

以下のKallePokkiが彼女のコメントで指摘したように。この問題は、GITを使用してプッシュすると、非対話的に実行されているため、umaskのセットアップが機能しないことです。0002リポジトリの更新後を更新して、誰かがプッシュするたびにumaskを設定しました。

4

2 に答える 2

3

私の知る限り、gitは必要なレベルのファイルパーミッションを保存していません。644または664のファイルがあるかどうかは、純粋にumaskに依存します。

core.sharedrepositoryは、リポジトリに保存されているファイルのパーミッションではなく、gitデータベースのファイルパーミッションのみを処理します。

Webサーバーのリポジトリをチェックアウトするための更新後のフックがすでにあるので、そこにchmodスクリプトを追加することをお勧めします。何かのようなもの

find /path/to/website -type d | xargs chmod 775
find /path/to/website -type f | xargs chmod 664

編集:私はあなたのssh/gitサーバーがインタラクティブにログインしたときのものとは異なるumaskを持っていると確信しています。おそらく、更新後のフックの先頭でumaskを明示的に設定する必要があります。マスターブランチに存在しないtmpブランチに追加ファイル「1」がある場合は、以下を参照してください。

$ umask 0022
$ git checkout tmp
Switched to branch 'tmp'
$ ls -l 1
-rw-r--r-- 1 kp kp 5 2013-01-15 15:53 1
$ git checkout master
Switched to branch 'master'
$ umask 0002
$ git checkout tmp
Switched to branch 'tmp'
$ ls -l 1
-rw-rw-r-- 1 kp kp 5 2013-01-15 15:53 1
于 2013-01-15T08:20:31.743 に答える
2

filemode=falseが原因です

http://www.gelato.unsw.edu.au/archives/git/0609/28190.htmlを参照してください

filemode = 0の場合、ファイルを追加するときに実行可能ビットを無視します。

ユーザーがcore.filemode=0を構成している場合、ユーザーがローカルファイルシステムを信頼できないことを示しているため、新しいファイルを追加するときにインデックスに実行ビットを設定しないでください。

これは、core.filemode = 0のリポジトリで実行可能とマークする必要のあるファイルを追加する場合、ユーザーは追加をコミットする前にファイルに対して「git update-index --chmod =+x」を実行する必要があることを意味します。

サインオフ:Shawn O. Pearceサインオフ:Junio C Hamano

于 2014-02-20T05:53:01.603 に答える