1261

私はここ数ヶ月、グループのCVSリポジトリと相互作用するローカルgitリポジトリを使用しています。私はほとんど神経症的な数の枝を作りましたが、そのほとんどはありがたいことに私のトランクに戻ってきました。しかし、ネーミングが問題になり始めています。単純なラベルで簡単に名前を付けるタスクがあるが、それぞれが独自のブランチとマージの状況を含む3つの段階でそれを実行する場合、毎回ブランチ名を繰り返すことができますが、それは歴史を少し混乱させます。ステージごとに個別の説明を付けて名前をより具体的にすると、ブランチ名が長くなり、扱いにくくなります。

ここで古いスレッドを調べて、名前に/が含まれるブランチに名前を付けることができることを学びました。つまり、トピック/タスクなどです。私はそれを始めて、それが物事をよりよく整理するのに役立つかどうかを見始めるかもしれません。

gitブランチに名前を付けるためのいくつかのベストプラクティスは何ですか?

編集:実際に命名規則を提案した人は誰もいません。ブランチが終わったら、ブランチを削除します。経営陣が常に優先順位を調整しているため、たまたまいくつかの問題が発生しています。:)タスクに複数のブランチが必要になる理由の例として、タスクの最初の個別のマイルストーンをグループのCVSリポジトリにコミットする必要があるとします。その時点で、CVSとのやり取りが不完全だったため、そのコミットを実行してから、そのブランチを強制終了しました。(その時点で同じブランチを使い続けようとすると、CVSとの相互作用があまりにも奇妙になります。)

4

7 に答える 7

1043

以下は、私が使用しているブランチの命名規則とその理由です。

ブランチの命名規則

  1. ブランチ名の先頭にグループ化トークン (単語) を使用します。
  2. 短いリード トークンを定義して使用し、ワークフローにとって意味のある方法で分岐を区別します。
  3. スラッシュを使用して、ブランチ名の一部を区切ります。
  4. 数字のみを先頭に使用しないでください。
  5. 存続期間の長いブランチの長い説明的な名前は避けてください。

グループ トークン

ブランチ名の前に「グループ化」トークンを使用します。

group1/foo
group2/foo
group1/bar
group2/bar
group3/bar
group1/baz

グループには、ワークフローに合わせて好きな名前を付けることができます。私は短い名詞を使うのが好きです。より明確にするために読んでください。

明確に定義された短いトークン

短いトークンを選択して、すべてのブランチ名にノイズを追加しすぎないようにします。私はこれらを使用します:

wip       Works in progress; stuff I know won't be finished soon
feat      Feature I'm adding or expanding
bug       Bug fix or experiment
junk      Throwaway branch created to experiment

これらの各トークンを使用して、各ブランチがワークフローのどの部分に属しているかを知ることができます。

変更のさまざまなサイクルに対して複数のブランチがあるようです。あなたのサイクルが何であるかはわかりませんが、それらが「新しい」、「テスト中」、および「検証済み」であると仮定しましょう. これらのタグの短縮バージョンを使用してブランチに名前を付けることができます。つづりは常に同じであり、それらをグループ化して、現在どの段階にいるかを思い出させることができます。

new/frabnotz
new/foo
new/bar
test/foo
test/frabnotz
ver/foo

どのブランチがそれぞれの段階に到達したかをすばやく確認でき、Git のパターン マッチング オプションを使用してそれらを簡単にグループ化できます。

$ git branch --list "test/*"
test/foo
test/frabnotz

$ git branch --list "*/foo"
new/foo
test/foo
ver/foo

$ gitk --branches="*/foo"

スラッシュを使用してパーツを区切る

ブランチ名には好きな区切り文字を使用できますが、スラッシュが最も柔軟であることがわかりました。ダッシュまたはドットを使用することをお勧めします。ただし、スラッシュを使用すると、リモートとの間でプッシュまたはフェッチするときに、ブランチの名前を変更できます。

$ git push origin 'refs/heads/feature/*:refs/heads/phord/feat/*'
$ git push origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

私にとっては、スラッシュは、シェルでのタブ展開 (コマンド補完) にも適しています。私が設定した方法では、パーツの最初の文字を入力して TAB キーを押すことで、異なるサブパーツを持つブランチを検索できます。Zsh は、入力したトークンの一部に一致するブランチのリストを表示します。これは、前のトークンだけでなく、埋め込まれたトークンにも機能します。

$ git checkout new<TAB>
Menu:  new/frabnotz   new/foo   new/bar


$ git checkout foo<TAB>
Menu:  new/foo   test/foo   ver/foo

(Zshell はコマンド補完に関して非常に構成可能であり、ダッシュ、アンダースコア、またはドットを同じように処理するように構成することもできます。しかし、私はそうしないことにしました。)

次のように、多くの git コマンドでブランチを検索することもできます。

git branch --list "feature/*"
git log --graph --oneline --decorate --branches="feature/*" 
gitk --branches="feature/*" 

警告: Slipp がコメントで指摘しているように、スラッシュは問題を引き起こす可能性があります。ブランチはパスとして実装されるため、「foo」という名前のブランチと「foo/bar」という名前の別のブランチを持つことはできません。これは、新しいユーザーにとって混乱を招く可能性があります。

裸の数字を使用しないでください

ブランチの命名スキームの一部として、裸の数字 (または 16 進数) を使用しないでください。参照名のタブ展開内で、git は番号がブランチ名ではなく sha-1 の一部であると判断する場合があります。たとえば、私の課題トラッカーはバグに 10 進数で名前を付けています。混乱を避けるために、関連するブランチには単に nnnnn ではなく CRnnnnn という名前を付けています。

$ git checkout CR15032<TAB>
Menu:   fix/CR15032    test/CR15032

15032 だけを展開しようとすると、git は SHA-1 の名前を検索するのか、ブランチ名を検索するのかわからなくなり、選択肢がいくらか制限されます。

長い説明的な名前を避ける

長いブランチ名は、ブランチのリストを見るときに非常に役立ちます。しかし、装飾された 1 行のログを見ると、ブランチ名が 1 行のほとんどを使い果たし、ログの表示部分を省略できるため、邪魔になる可能性があります。

一方、習慣的に手作業で書き直さない場合、長いブランチ名は「コミットのマージ」でより役立ちます。デフォルトのマージ コミット メッセージはMerge branch 'branch-name'. Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted'マージ メッセージを だけではなくとして表示する方が便利な場合がありますMerge branch 'fix/CR15032'

于 2011-05-19T23:25:29.053 に答える
358

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

Driessenのモデルには次のものが含まれます

  • リリースにのみ使用されるマスターブランチ。代表的な名前master

  • そのブランチからの「開発」ブランチ。これは、ほとんどの主要な作業に使用されるものです。一般的に名前が付けられdevelopます。

  • 開発ブランチからの複数の機能ブランチ。機能の名前に基づく名前。これらは、マスターブランチやリリースブランチではなく、開発にマージされます。

  • 候補リリースを保持するためのリリースブランチ。バグ修正のみで、新機能はありません。代表的な名前rc1.1

ホットフィックスは、マスターからの変更に対する短期間のブランチであり、開発ブランチが関与することなくマスターに移行します。

ここに画像の説明を入力してください

于 2010-11-23T16:58:18.537 に答える
65

私が見たさまざまなスキームから、使用しているツールに基づいて組み合わせて一致させました。
したがって、完成したブランチ名は次のようになります。

名前/機能/課題トラッカー番号/簡単な説明

これは次のように変換されます。

マイク/ブログ/RSSI-12/ロゴ修正

構成を容易にするために SourceTree 内のフォルダーとして解釈されるため、各パーツはスラッシュで区切られています。問題の追跡には Jira を使用しているため、番号を含めることでシステム内での検索が容易になります。その番号を含めると、プル リクエストを送信しようとしたときに Github 内でその問題を見つけようとするときにも検索可能になります。

于 2013-10-10T15:58:08.257 に答える
61

私の個人的な好みは、トピック ブランチを使い終わったらブランチ名を削除することです。

ブランチ名を使用してブランチの意味を説明しようとする代わりに、そのブランチの最初のコミットでコミット メッセージの件名を「Branch:」で開始し、件名の場合はメッセージの本文に詳細な説明を含めます。十分なスペースがありません。

私が使用しているブランチ名は、作業中にトピック ブランチを参照するための純粋なハンドルです。トピック ブランチの作業が終了したら、後で参照できるようにコミットにタグを付けて、ブランチ名を削除します。

これにより、 の出力もgit branchより便利になります。すべてのブランチではなく、存続期間の長いブランチとアクティブなトピック ブランチのみがリストされます。

于 2008-11-07T21:51:16.410 に答える
21

すべてのタスクに3つのブランチ/マージが必要なのはなぜですか?それについてもっと説明してもらえますか?

バグ追跡システムを使用している場合は、ブランチ名の一部としてバグ番号を使用できます。これにより、ブランチ名が一意に保たれ、人間が読めるように、短くて説明的な単語を1つまたは2つ接頭辞として付けることができます"ResizeWindow-43523"。また、関連するバグを調べることができるため、ブランチをクリーンアップするときに作業が簡単になります。これは私が通常私のブランチに名前を付ける方法です。

これらのブランチは最終的にマスターにマージされるため、マージ後に安全に削除する必要があります。とマージしない限り--squash、ブランチの履歴全体は、必要になった場合でも存在します。

于 2008-11-11T06:24:54.640 に答える
7

farktronix の提案に従って、 Jiraチケット番号を mercurial で同様に使用してきました。git ブランチにも引き続き使用する予定です。しかし、チケット番号自体はおそらく十分に一意だと思います。farktronix が指摘したように、ブランチ名に説明的な単語を含めると役立つ場合がありますが、ブランチ間を頻繁に切り替える場合は、入力を減らしたいと思うでしょう。次に、ブランチ名を知る必要がある場合は、Jira でチケット内の関連付けられたキーワードを探します。さらに、各コメントにチケット番号を含める必要があります。

ブランチがバージョンを表している場合、一般的な規則は、ブランチ名に xxx (例: "1.0.0") 形式を使用し、タグ名に vx.xx (例: "v1.0.0") を使用することです (競合を避けるため)。 . 参照: is-there-an-standard-naming-convention-for-git-tags

于 2010-01-27T21:31:55.277 に答える