Git - 複数のユーザーが同じ作業ディレクトリを使用する: .git メタファイルの権限の問題 質問する

Git - 複数のユーザーが同じ作業ディレクトリを使用する: .git メタファイルの権限の問題 質問する

問題:複数のユーザーが同じ作業ディレクトリにアクセスできる場合、何らかの操作を実行するとメタデータで権限の問題が発生する可能性がありますgit

免責事項: 私を叱責する前に、作業ディレクトリを共有することは Git の理念に反することを理解しています。また、この共有ディレクトリで読み取り専用操作以外の操作を行うことについて話しているわけではありません。私たちはすべての作業を自分のローカル リポジトリで行います。

私たちのアプローチは確かにベストプラクティスではないので、私たちがやろうとしていることを実行する別の方法についての提案は歓迎しますが、その会話が他の人に聞くのに有益かどうかはわかりません。そこで、今のところ、私たちがこれを行っている理由についていくつか詳細を述べさせてください。

私たちのチームにはビルド マスターが数名います。Linux サーバーにデプロイし、Git から直接プルするビルド スクリプトを使用してそこでビルドを実行します。現時点では CI (Jenkins/cruisecontrol など) を使用できないため、チェックアウトして QA ビルドを実行するリポジトリがあります。

スクリプトの一部として実行する Git 操作がいくつかあります。これには、コミットのタグ付け (QA-current、QA-previous などのタグが付けられます) が含まれます。したがって、実際には完全に読み取り専用ではないと思います。ビルド スクリプトの性質上、sudo共通ユーザーとして実行します (そのユーザーを DevAdmin と呼びます)。これは悪い習慣である可能性があり、共有リポジトリのチェックアウトを使用する必要があるため、おそらく問題の原因であると思います。

作業ディレクトリにいるときに常に sudo が実行されていれば、すべて問題ありません。問題は、git pullDevAdmin として sudo が実行されずに、誰かが誤って または同様の操作を実行してしまうことです。そのため、 内のほとんどのファイルは.gitDevAdmin (最初のクローンを実行したユーザー) が所有していますが、これを行うと、 内のディレクトリには.git/objects特定のユーザーが所有するファイルが含まれることになります。また、これらはグループ書き込み不可として作成されます。たとえば、所有権が間違っていることにも気付きましたORIG_HEAD。そのため、DevAdmin として何かをしようとすると、問題が発生します。

この問題を解決するために何かできることはありますか? 現時点では、問題が発生したことを認識して、サーバー管理者にchown .gitDevAdmin に戻ってもらう必要があります。または、ユーザーに問題のメタファイルを削除してもらうか、少なくともchmodグループ書き込み可能にしてもらいます。これはすべて非常に悪いようです。

ビルドとメンテナンスのプロセスを大幅に変更する必要のないいくつかのオプションを検討しました。

グループ書き込みアクセスを削除し.git、DevAdmin に制限すれば、この問題が再発するのを防ぐことができますか? これが最も簡単なオプションのようです。

.giまたは、新しく作成された場合でも、t グループ内のすべてのものを書き込み可能にする方法はありますか? これはトラブルからの質問のように思えます。

私が見逃している明らかなことはありますか? おそらく、プロセスを変更してユーザーが自分のリポジトリで作業できるようにするのが最善策だとは思いますが、ビジネス環境ではリポジトリが非常に大きくなる可能性があり (jar がまだ分離されていない、バイナリ ファイルが多数あるなど)、すべてのアカウントに数 GB のリポジトリを用意することはできません。さらに、システム管理者は、それを可能にするためにプロセスを変更する作業が山積みになります。

ご意見をお待ちしております。

ベストアンサー1

あります方法の数この問題に対処するには、既存のリポジトリに次の内容を含めることをお勧めします。

# Create a group named "gitshare" that will share the repository.
sudo groupadd gitshare

# Add yourself and as many others as you want to the group.
sudo adduser "$LOGNAME" gitshare

# Everything else needs to run from the top level of your Git repository.
cd /path/to/repository

# Add group permissions for *new* modifications to repository.
git init --shared=group

# Fix permissions for existing repository objects.
chown -R :gitshare "$PWD"
chmod -R g+swX "$PWD" 

当然ですが、ユーザーがリポジトリまでのディレクトリ トラバーサル権限を持っていること (たとえば、ユーザー専用のディレクトリは問題を引き起こす可能性があります)、およびアクセスを必要とするすべてのチーム メンバーがリポジトリの共有グループに属していることを確認する必要があります。ただし、この初期設定の後は、問題なく動作するはずです。

おすすめ記事