RedHat 8サーバーにローカルのGitバージョンコントロールがインストールされていて、それを実行すると、私と他のすべてのチームに対してrootとして実行を追加する権限をgit add *
要求します。sudo
sudo git add *
したがって、実行するとgit log
変更のリストが表示されますが、すべての変化の変化者は根です。各ユーザーに自分の資格情報を使用して実行させるにはどうすればよいですか?
答え1
git
したがって、ここで何が起こるのかは、root以外のユーザーがアクセスできないファイルを使用しようとしていることです。
これは、実際のソースファイルがあなたのものではないか、.gitディレクトリがあなたのものではないからです。これは誰か(おそらく?)が.gitディレクトリを使用すると明らかに起こりますsudo git
。
Gitはマルチユーザーストアのチェックアウトでは機能しません。gitを元の方法で使用するだけです。特別に設計されたいいえ使用1.
あなた止まらなければならない現在使用している方法でgitを使用してください。これにより、最終的に誰かが何かを壊す可能性があり、リポジトリを修正する必要があります。これが最善のシナリオです。人々があなたがしていることを正確に実行し、最終的にチェックアウトから追跡された状態を回復できないように分離してソースコードが失われることを見たことがあります。これは、1つの共有リポジトリの使用に固執し、sudo
実際にリポジトリを複製するのに30秒を費やすのではなく、ローカルで作業し、アップストリームでgit push
変更を実行するためです。
Gitは、各ユーザーが自分が100%所有する「アップストリーム」リポジトリの独立した独立したレプリカを持つように設計されています。各ユーザーは自分のコピーを処理する必要があります。共有コピーなし。
「変更を適用し、共有インフラストラクチャに適用する必要があります」などの作業が必要な場合は、次のことができます。
- サーバーのどこかで新しいユーザー(通常はそのユーザーと呼ばれる
git
)を設定し、すべてのチームメンバーのSSH公開鍵をそのユーザーに追加します$HOME/.ssh/authorized_keys
。 - あなたはない新しいユーザーのホームディレクトリです
git init --bare mygitproject
。 - スクリプトを次のように追加します。
post-receive
子フック。誰かがリポジトリに何かをプッシュすると、Gitは自動的にスクリプトを実行します。 3.1。たとえば、このスクリプトでは、「main
リポジトリのブランチにプッシュする場合は、すべてのファイルをターゲットディレクトリにチェックアウトします」などの操作を実行できます。たとえば、git --work-tree=/etc/apache2 checkout main
gitでapache2設定を維持したい場合は、このスクリプトでエントリを見つけることができます。 - すべての個人ユーザーが
git clone
自分の情報を取得するために使用します。地元のそして私自身買戻契約書のコピー。git commit
ついに彼らはそこで働きますgit push
。ルート/sudo
参加はまったくありません!
もちろん、上記のタスクは、小さな「持続的展開」(CD)環境を実装することです。プッシュできる人の管理など、これらすべてを実行できるより多くのソフトウェアがあります。ポジジョその一つです。
¹Gitはいわゆる話をサポートしています。共有ストレージ実際には多くの注意があり、基本的なユーザー権限の問題の結果を理解することが厳しく必要です。エラーを説明する方法で見ると、これは実際にあなたとあなたの同僚がいる状況ではありません。これらのオプションを使用しないことを強くお勧めし、要求に応じて使用法の詳細については詳しく説明しません。
公式Gitマニュアルには次のように記載されています(私の解釈)。
あなたできるそうすることは、41年のバージョン管理システムアーキテクチャに精通しており、新しいことを学ぶのが遅い場合に特に魅力的です。しかし、いいえこれは、誰かが誤ってすべてを破壊するのを防ぐなど、良いことしかできません。