最近 Git の使用を開始しました (以前は Subversion を使用していました)。ロックを必要とせずに、問題を解決できるワークフローの変更を見つけました。git の設計方法とブランチの容易さを利用しています。
基本的には、非マスター ブランチにプッシュし、そのブランチのレビューを行ってから、マスター ブランチ (またはターゲット ブランチが何であれ) にマージすることになります。
git が「意図的に」使用される方法として、各開発者は独自のパブリック リポジトリを公開し、他の開発者にそこからプルするように要求します。Subversion ユーザーはそれで問題を抱えていることがわかりました。そのため、代わりに、各ユーザーが独自のブランチ ツリーを持つ中央リポジトリのブランチ ツリーにプッシュします。たとえば、次のような階層が機能する場合があります。
users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey
独自の構造を自由に使用してください。また、git のもう 1 つの一般的なイディオムであるトピック ブランチも示していることに注意してください。
次に、ユーザー a のローカル リポジトリで:
feature1
feature2
そして、それを中央サーバー (オリジン) に取得するには:
git push origin feature1:users/a/feature1
(これはおそらく構成の変更で単純化できます)
いずれにせよ、feature1 がレビューされたら、責任者 (この場合、それは機能の開発者です。master へのマージを担当する単一のユーザーを持つことができます) は、次のことを行います。
git checkout master
git pull
git merge users/name/feature1
git push
プルはフェッチ (新しいマスターの変更と機能ブランチをプル) を行い、マスターを中央リポジトリにあるものに更新します。ユーザー a がジョブを実行し、マスターを適切に追跡した場合、マージに問題はないはずです。
これはすべて、ユーザーまたはリモート チームがバイナリ リソースに変更を加えた場合でも、マスター ブランチに組み込まれる前にレビューを受けることを意味します。そして、いつ何かが master ブランチに入るかについて (プロセスに基づく) 明確な線引きがあります。
git フックを使用してプログラムでこの側面を強制することもできますが、繰り返しますが、私はまだこれらを扱っていないので、それらについて話すことはできません。