web-dev-qa-db-ja.com

Gitの分岐とタグ付けのベストプラクティス

Pro Git を読んで、現在Gitの使い方を学んでいます。現在、ブランチとタグについて学習しています。私の質問は、いつブランチを使用する必要があるか、いつタグを使用する必要があるかです。

たとえば、プロジェクトのバージョン1.1のブランチを作成するとします。このバージョンを完了してリリースしたら、ブランチを離れてリリースバージョンをマークする必要がありますか?または、タグを追加する必要がありますか?タグを追加した場合、バージョンブランチを削除する必要がありますか?

149
Code-Guru

簡単に言うと:ベストプラクティスは、分岐して、頻繁にマージし、常に同期を保つことです

コードをマスターブランチとは別のブランチに保持することについては、かなり明確な規則があります。

  1. 大きな変更または破壊的な変更を実装しようとしています
  2. 使用されない可能性のある変更を加えようとしています
  3. あなたはそれがうまくいくと確信していない何かで実験したいです
  4. あなたが分岐するように言われるとき、他の人は彼らがマスターでする必要がある何かを持っているかもしれません

経験則では、ブランチアウト後は、マスターブランチと同期を保つ必要があります。最終的にはそれをマスターにマージする必要があるからです。マージ時に巨大で複雑な混乱の混乱を回避するには、頻繁にコミットし、頻繁にマージする必要があります。

従うべき良い習慣

成功したGit分岐モデル byVincent Driessenは良い提案をしています。この分岐モデルが魅力的である場合は、 gitへのフロー拡張 を検討してください。他には フローについてコメント があります。

タグ付けのプラクティス

ご存じのとおり、Gitは1.0-2-g1ab3183のようなコミット識別子を提供しますが、これらはタグではありません!タグ付けはgitタグで行われ、gitタグを使用して作成されるタグは、git describeが作成するコミット識別子のベースになります。つまり、Gitではブランチにタグを付けません。コミットにタグを付けています。タグはコミットへの注釈付きポインタに過ぎないと言うのは正しいことです。

それを実証した実用的な例を見てみましょう。

 /-[v1.0] 
 v 
 ---.---.---.--- S ---.--- A <- -マスター
\
\-.--- B <-テスト

'S'をコミットしてみましょう。タグ 'v1.0'が指すコミットです。このコミットはブランチ 'master'とブランチ 'test'の両方にあります。コミット 'A'の上( 'master'ブランチの上)で " git describe "を実行すると、v1.0-2-g9c116e9のようになります。コミット 'A'(別名 'test'ブランチ)の上で "git describe"を実行すると、v1.0-2-g3f55e41のような結果が得られます。これは、デフォルトのgit-describe構成の場合です。この結果は少し異なることに注意してください。 v1.0-2-g9c116e9は、ソートされたSHA-1 ID 9c116e9を使用してコミットしていることを意味し、タグv1.0の後に2回コミットします。タグがありませんv1.0-2

タグをブランチ「マスター」にのみ表示する場合は、「テスト」ブランチの分岐点の後に新しいコミットを作成できます(たとえば、GIT-VERSION-FILEのデフォルト/フォールバックバージョン情報のみを更新します)。 「test」ブランチのコミットにタグを付けると、 「v1.0.3」は「テスト」からのみ表示されます。

参考文献

私は学ぶべき多くの、多くの、有用なブログと投稿を見つけました。ただし、プロが描いたものはまれです。したがって、@ nvieによる投稿- 成功したGit分岐モデル をお勧めします。私は彼のイラストを借りました:)

enter image description here

167
Yusubov

同時に2つの異なるバージョンのリポジトリがある場合は、ブランチが使用されます。タグは、リポジトリ内の特定の時点をマークする方法です。

リリース済みバージョンをマークするタグを追加する必要があります。そのリリースにバグ修正を行う必要がある場合は、タグにブランチを作成します。

HEAD [または他のブランチ]にマージされたブランチのみを削除したい。

37
gam3