2017-11-27 6 views
2

私のローカルgitから、私は私のプライベートリモートリポジトリ(ssh経由)にプッシュします。ここでは、すべてのファイルをグループ、特に他人のためのアクセスなしで。リモートのgitファイルを所有者r、wのみに許可

私が意味する考えリモコン.git/config

[core] 
    sharedRepository 0600 

でリモートのgit

関連の設定のコンフィグにgitの内部umaskの上書きを設定することで、自分自身を助けることを試みてきました。 "ちょっとチェックアウトするときはいつも、ちょっと親切にして6(ファイル所有者の権限)、0(グループや他の人には全く権限がない)を設定しますか?

gitのバージョンリモート側は2.7.4です。

これはうまくいきませんでした。何度か新しいファイルをリモート(非裸の)git repoにプッシュしました。その他の試み

は、さらに私は、プリ受け取るフックスクリプトでのumaskを設定することができると考えた。スクリプトが正常にプッシュ時に実行されます

#!/bin/bash 

umask > /umask.at.pre-receive 
umask 0077 
exit 0 

.git/hooks/pre-receiveコンテンツが、しかし(オブジェクト、.gitフォルダの内容などを含む)すべてのファイルが書き込ま所望の効果は、(グループの権限usetを持つことになるされており、その他)。

更新

(その間に削除されました)いくつかの答えは、問題がcore.sharedRepository設定は、ローカルでのみ動作していることかもしれないと、(私の理解に)暗示しました。その結果、リモートで電話を受けるときgit pushは、リモート側がcore.sharedRepositoryの設定を使用するのを誘発しません。

答えは、チェックアウトする前にファイルを変更できるように、smudge-filtersを調べるように提案されました。 これは、この質問に描かれている問題の部分的な解決策かもしれません。

+0

私は、この方法でファイルモード(ファイルの内容のみ)を変更できないことを発見したため、私は汚れフィルタについて私の答えを削除しました。私はこれに少し戸惑っています。私は現在解決策を探していますが、現時点でGitにそのような機能がないと驚くことはありません。 –

+0

@PatrykObara私はとにかく答えを高く評価しました。 'core.sharedRepository'が" dead-end "になる理由は、この設定がファイルシステムのローカルパーミッションにのみ適用されるからです。 – humanityANDpeace

答えて

1

いくつかのバンドエイド、回避策 "解決策"リモートのgitを所有者にファイルのアクセス許可を設定するには、私は少しだけ緩和/私の質問を動機付けた問題を解決するために出てきました。リモート .git/hooks/post-receive

私はパーミッションについて話す

#!/bin/bash 

# change recursively the file permission of the parent dir (cwd was .git) 
# to owner access only 
chmod o-rwx,g-rwx .. -R 

exit 0 

を入れて、ここでこの解決策の欠点は、ファイルがグループ、他の人にbrievlyアクセスされた時間があるということです。

誰かがより信頼性の高い回答を提供して、ファイルの権限を再調整しないようにしたいと思いますが、gitは最初から正しい制限付きの権限でファイルを作成します。

更新

ファイルのgitを作成するときに(私はいくつかのテストを示した少なくとも何)(OSはSYSTEMCALL経由で提供をumaskをサポートする過程と仮定した場合)のumaskを尊重ありません。非常に簡単な解決策は、リモートgitのumaskを設定することです。これは多くの場合、.profileまたは時には標準のシェルのinit rcファイル(例:.bashrc)を介して行われます。このファイルは、リモートgitの起動時を含め、各sshで実行されるようです。したがって

リモートマシン、このラインと.bashrc

umask 0077 

を設定すると、最終的に所望の(縮小)権限セットを持つファイルを作成し、リモートのgitにつながりました。

+0

Gitが保持する唯一の許可ビットは "実行可能ファイルと実行可能ファイルではありません"です。全てのファイルブロブは、「モード0755」又は「モード0644」のいずれかである。 Gitは、実際にはそれらをモード0777やモード0666として作成しようとしますが、現在の 'umask'を使って不要なグループを削除します。その他の権限 – torek

+0

@torekファイルが実行可能であれば、gitはパーミッションを追跡しないことがわかります。とにかく 'git'がそれを追跡しているのではなく、git hatで* override *へのスイッチが' umask'を提供していれば( 'umask'の事前設定が不可能な場合など)あなたのコメントは、答えにさらなる情報を提供します。これは素晴らしいです:) – humanityANDpeace

関連する問題