現在、 Pro Git aを読んでGitの使い方を学んでいます。 >。現在、ブランチとタグについて学習しています。私の質問は、いつブランチを使用する必要があり、いつタグを使用する必要があるかということです。
たとえば、プロジェクトのバージョン1.1のブランチを作成するとします。このバージョンを終了してリリースするとき、リリースバージョンをマークするためにブランチを離れる必要がありますか?それともタグを追加する必要がありますか?タグを追加する場合、バージョンブランチを削除する必要があります(マスターまたは他のブランチにマージされていると仮定します) )?
回答
要するに:ベストプラクティスは分岐し、頻繁にマージし、常に同期を保つことです。
コードをマスターブランチとは別のブランチに保持することについては、かなり明確な規則があります。
- 大きな変更または破壊的な変更を実装しようとしています
- 使用されない可能性のある変更を加えるため
- うまくいくかどうかわからないことを実験したい
- 分岐するように言われたとき、他の人がマスターでやらなければならないことがあるかもしれません
経験則は分岐した後です、あなたはマスターと同期し続けるべきですブランチ。最終的にはそれをマスターにマージして戻す必要があるためです。マージする際の非常に複雑な競合の混乱を回避するには、頻繁にコミットし、頻繁にマージする必要があります。
従うべきグッドプラクティス
Vincent Driessen による成功したGit分岐モデルには良い提案があります。この分岐モデルが魅力的な場合は、 gitへのフロー拡張を検討してください。他の人はフローについてコメントしています。
タグ付けの方法
すでにご存知のように、Gitは1.0のようなコミット識別子を提供します-2-g1ab3183しかし、それらはタグではありません!タグ付けはgitタグを使用して行われ、gitタグを使用して作成されたタグは、gitdescribeが作成するコミット識別子のベースになります。言い換えると、Gitではブランチにタグを付けません。コミットにタグを付けています。タグはコミットへの注釈付きポインタにすぎないと言うのは正しいです。
それを実証した実際の例を見てみましょう。
/-- [v1.0] v ---.---.---.---S---.---A <-- master \ \-.---B <-- test
コミット「S」をタグ「v1.0」が指すコミットにしましょう。このコミットは、ブランチ「master」とブランチ「test」の両方で行われます。コミットの上に" git describe "を実行した場合 ” A」(「マスター」ブランチの上部)は、v1.0-2-g9c116e9
のようなものになります。コミット「B」(別名「テスト」ブランチ)の上で" git describe "を実行すると、次のようになります。 div id = “0871ba9170″>
、これはデフォルトのgit-describe構成の場合です。この結果はわずかに異なることに注意してください。 v1.0-2-g9c116e9
は、ソートされたSHA-1IDが9c116e9
でコミットされ、タグv1.0
。タグはありませんv1.0-2
!
タグをブランチ「master」にのみ表示する場合は、新しいコミットを作成できます(たとえば、デフォルトの更新/フォールバックのみ) 「テスト」ブランチのブランチポイント後のバージョン情報(GIT-VERSION-FILE)。 「テスト」ブランチでコミットにタグを付ける場合、たとえば「v1.0.3`は「テスト」からのみ表示されます。
参考資料
学ぶのに役立つブログや投稿をたくさん見つけました。しかし、それらは専門的に説明されているのはまれなものです。したがって、投稿をお勧めします- @nvieによる成功したGit分岐モデル。私は彼の説明を借りました:)
コメント
- 1.0-2-g1ab3183はgitから入手可能な情報からgitdescribeによって構築された識別子ですが、それをgit識別子と呼ぶのは少し多すぎます。GitはSHAハッシュによって識別します。タグとブランチは、gitが追跡しやすい人間の構造です。そのため、タグを作成します。誰かがいつかコミットへの便利なブックマークを見つけたいと思うとき。
- gitユニバースの多次元性の素晴らしいイラスト。美しい。ありがとう
- 価値がある多くのプロジェクトにはいくつかの必要がないことに注意してくださいこの図に示されているレーンの一部のプロジェクトでは、ここで開発および機能と呼ばれる'のみが必要です。これは、自由にデプロイできるWebアプリに当てはまることがよくあります。
- git flowの作成者でさえ、Web開発などの多くのプロジェクトタイプに推奨しなくなりました。多くの人々は、それが大多数のプロジェクトが必要とするよりもはるかに複雑であり、実行するのが面倒で、間違えやすいと信じています。スペクトルの反対側では、一部の上級実務家の支持チームは、'トランクベースの開発'を使用します。これは、ブランチをほとんど使用しません。そのような成功したプロジェクトを提供します。中間的なものについては、" anti-gitflow '
回答
2つの異なるバージョンのリポジトリが同時にある場合、ブランチが使用されます。タグは、リポジトリ内の特定の時点をマークする方法です。
リリースされたバージョンをマークするには、タグを追加する必要があります。その後、そのリリースにバグ修正を加える必要がある場合は、タグにブランチを作成します。
HEAD [または他のブランチ]にマージされたブランチのみを削除します。
コメント
- ああ…そして、ブランチがマスターなどの別のブランチにマージされていることを意味していると思います。 HEADはチェックアウトを行うたびに移動しますよね?
- HEADは通常ブランチを指しています('分離されたHEADモードでない限り)。それが指すブランチ