インポート時にGitが権限と所有権を変更できないようにする方法はありますか?

インポート時にGitが権限と所有権を変更できないようにする方法はありますか?

git pull操作を実行するgit resetたびに、git権限と所有権に対する変更がリセットされます。自分で見てください:

#!/usr/bin/env bash
rm -rf 1 2

mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1

git clone . ../2
cd $_
chmod 0640 1
chgrp http 1

cd ../1
echo 12 > 1 && git ci -am 2

cd ../2
stat 1
git pull
stat 1

出力:

$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----)  Uid: ( 1000/    yuri)   Gid: (   33/    http)
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    yuri)   Gid: ( 1000/    yuri)

回避策がありますか?

Webサーバーでいくつかのファイル/ディレクトリを書き込むことができるようにしたいと思います。

答え1

あなたが実行しているユーザーのデフォルトグループがに設定されているようですyuri。以下で確認できます。

$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)

アカウントのUIDは次のとおりです。uid=1000(saml)プライマリグループはgit=1000(saml)で、その後のすべてのセカンダリグループはです。

メモ:git cloneに特定の所有権を付与するには、少なくとも2つのオプションがあります。

オプション1

次のように、必要に応じて特権を持つ親ディレクトリを設定します。

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

これにより、ディレクトリはtopdirその下のすべてのサブディレクトリにグループを適用するように強制されますhttp。これはほとんどの場合機能しますが、ファイルがこのgit cloneワークスペースに移動された場合、上記の変更でグループが適用されないため、問題が発生する可能性があります。

オプション#2

作業を開始する前に、デフォルトグループをhttp次のように変更してください。

$ newgrp http
$ git clone ...

httpこの方法は、生成されたすべての新しいファイルのグループが通常のデフォルトグループではなくに設定されることを強制しますyuriが、newgrpこのワークスペースで作業する前に実行する必要があることを覚えている場合にのみ機能します。

その他のオプション

これらのいずれも許可されていない場合は、gitワークスペースディレクトリでACLを試すことができます。これらの問題は、このサイトのいくつかのQ&Aで議論されています。たとえば、次のようになります。Linuxでグループ権限を継承する新しいファイルをインポートする

答え2

私が使った解決策はユーザーとしてコマンドを実行する維持する権限が必要です。

sudo -u user command

これにより権限は変更されません。 Webサーバーのユーザーにファイル権限を設定しながら、VPSでgitリポジトリを更新するときにこれを使用します。

同じ質問も参照してくださいここ

関連情報