ローカルGitマルチユーザーの問題

ローカルGitマルチユーザーの問題

RedHat 8サーバーにローカルのGitバージョンコントロールがインストールされていて、それを実行すると、私と他のすべてのチームに対してrootとして実行を追加する権限をgit add *要求します。sudosudo git add *

したがって、実行するとgit log変更のリストが表示されますが、すべての変化の変化者は根です。各ユーザーに自分の資格情報を使用して実行させるにはどうすればよいですか?

答え1

gitしたがって、ここで何が起こるのかは、root以外のユーザーがアクセスできないファイルを使用しようとしていることです。

これは、実際のソースファイルがあなたのものではないか、.gitディレクトリがあなたのものではないからです。これは誰か(おそらく?)が.gitディレクトリを使用すると明らかに起こりますsudo git

Gitはマルチユーザーストアのチェックアウトでは機能しません。gitを元の方法で使用するだけです。特別に設計されたいいえ使用1.

あなた止まらなければならない現在使用している方法でgitを使用してください。これにより、最終的に誰かが何かを壊す可能性があり、リポジトリを修正する必要があります。これが最善のシナリオです。人々があなたがしていることを正確に実行し、最終的にチェックアウトから追跡された状態を回復できないように分離してソースコードが失われることを見たことがあります。これは、1つの共有リポジトリの使用に固執し、sudo実際にリポジトリを複製するのに30秒を費やすのではなく、ローカルで作業し、アップストリームでgit push変更を実行するためです。

Gitは、各ユーザーが自分が100%所有する「アップストリーム」リポジトリの独立した独立したレプリカを持つように設計されています。各ユーザーは自分のコピーを処理する必要があります。共有コピーなし

「変更を適用し、共有インフラストラクチャに適用する必要があります」などの作業が必要な場合は、次のことができます。

  1. サーバーのどこかで新しいユーザー(通常はそのユーザーと呼ばれるgit)を設定し、すべてのチームメンバーのSSH公開鍵をそのユーザーに追加します$HOME/.ssh/authorized_keys
  2. あなたはない新しいユーザーのホームディレクトリですgit init --bare mygitproject
  3. スクリプトを次のように追加します。post-receive 子フック。誰かがリポジトリに何かをプッシュすると、Gitは自動的にスクリプトを実行します。 3.1。たとえば、このスクリプトでは、「mainリポジトリのブランチにプッシュする場合は、すべてのファイルをターゲットディレクトリにチェックアウトします」などの操作を実行できます。たとえば、git --work-tree=/etc/apache2 checkout maingitでapache2設定を維持したい場合は、このスクリプトでエントリを見つけることができます。
  4. すべての個人ユーザーがgit clone自分の情報を取得するために使用します。地元のそして私自身買戻契約書のコピー。git commitついに彼らはそこで働きますgit push。ルート/sudo参加はまったくありません!

もちろん、上記のタスクは、小さな「持続的展開」(CD)環境を実装することです。プッシュできる人の管理など、これらすべてを実行できるより多くのソフトウェアがあります。ポジジョその一つです。


¹Gitはいわゆる話をサポートしています。共有ストレージ実際には多くの注意があり、基本的なユーザー権限の問題の結果を理解することが厳しく必要です。エラーを説明する方法で見ると、これは実際にあなたとあなたの同僚がいる状況ではありません。これらのオプションを使用しないことを強くお勧めし、要求に応じて使用法の詳細については詳しく説明しません。
公式Gitマニュアルには次のように記載されています(私の解釈)。

あなたできるそうすることは、41年のバージョン管理システムアーキテクチャに精通しており、新しいことを学ぶのが遅い場合に特に魅力的です。しかし、いいえこれは、誰かが誤ってすべてを破壊するのを防ぐなど、良いことしかできません。

関連情報