2012-06-15 6 views
16

私はgitをVCSとして使用している大規模プロジェクトがあります。任意の時点で、私はいくつかの機能/バグ修正などの実装に取り​​組んでいます。特定の機能/バグについては、ブランチの階層を作成することはいいでしょう。gitブランチを整理する

$ git branch 
    feature1 
     sub-branch1 
     sub-branch2 
     sub-branch3 
    feature2 
     sub-brancha 
     *sub-branchb #<--currently checked out 
     sub-branchc 
    bugfix1 
     sub-branch-foo 

$ git checkout sub-brancha 
$ git branch 
    feature1 
     sub-branch1 
     sub-branch2 
     sub-branch3 
    feature2 
     *sub-brancha #<--currently checked out 
     sub-branchb 
     sub-branchc 
    bugfix1 
     sub-branch-foo 

これを行うことは可能ですか、より基本的な命名方式を採用する必要がありますか?それ私が探しているものをもう少し具体的なようにするに

EDIT

、特長1はGitのブランチであれば、上記の例では、サブ支社はfeature1からgit checkout -b sub-branch1によってすべて作成されていますブランチ(マスターから分岐しています)。例えば:

$ git checkout master 
$ git checkout -b feature1 
$ git checkout -b testing 
$ git branch 
master 
    feature1 
    *testing 
$ git checkout master 
$ git checkout -b feature2 
$ git branch 
master 
    feature1 
     testing 
    *feature2 

Gitのブランチは、単に彼らが(少し余分なインデント付き)どこから来たので枝を整理持つことは、私が持っていることができれば、スーパーボーナスポイントが...私の目的のために十分な、おそらく良いです:

$ git branch 
    feature1 
     testing 
    feature2 
     testing 
    bugfix1 
     sub-branch-foo 
を「特長1 /テスト」の間の名前の競合を管理するためのいくつかの方法で

と「特長2 /テスト」

+0

なぜ新機能の開発に異なるサブブランチがあるのですか? –

+1

@FatihArslan:どうしてですか?機能は単なるコードを変更するだけではありません - 機能はコードの束に触れる可能性があり、各部分は個別にテスト/開発することができます...または、機能のアルファ(安定したish)ベータ(不安定)。アルファは私にとってはうまくいくようですが、ベータ版ではパフォーマンスを向上させるためにいくつかの変更が加えられています...それは私の頭の上から2つのケースです。私が見ているように、これを行う理由は、最初に枝を持つ理由と変わりはありません。 – mgilson

+0

何が問題なのですか?ブランチからブランチを作ることができるのか、 'gitブランチ 'の出力フォーマットを変更できるのかしら? –

答えて

14

あなたはその上の特徴1 /サブbrancha、特長2 /サブbranchbと同様に命名スキーマを使用することができ、名前のスラッシュはgitの問題ではありません。しかし、ブランチは引き続き通常のブランチとして扱われます(ただし、サブブランチをどう扱うかは分かりません)。 git branchコマンドは、ブランチのフルネームを表示しますが、例の中には表示されません。興味深いことに、スラッシュを含む命名スキーマは.git/refs/heads /にディレクトリ階層を作成します。おそらく、いくつかの低レベルのコマンドでサブブランチを処理するのに便利でしょうか?

+0

* sigh * - これは私が恐れていたものです。私がこれをするために出発するたびに、私は忘れ去ってしまい、全体の仕組みが窓から出て行きます。私はgitが私の混乱した傾向を解消することを望んでいました... – mgilson

+3

あなたの命名計画を強制する小さなツールを書くことができます。たぶんいくつかのエイリアスで十分かもしれません。あるいは、あなたはこの方向に少し進む(しかし、あなたが必要とするものではないかもしれない)[gitflow](https://github.com/nvie/gitflow)を見ることができます。 – jgosmann

+0

gitflowは間違いなく正しい方向のステップのように見えます。そのリンクをありがとう。 – mgilson

2

Gitのブランチは、実際にGitのオブジェクトストアのキーに対するシンボリックリファレンスです。意味するように私たちが正確である必要がある場合

は、我々が開発のラインを意味する単語「ブランチ」を使用し、「ブランチヘッド」(または単に「ヘッド」):ドキュメント("What is a branch")を引用しますブランチでの最新のコミットへの参照。上記の例では、 "A"という名前のブランチヘッドは特定の1つのコミットへのポインタですが、そのすべてが "ブランチA"の一部であるため、そのポイントまでの3つのコミットの行を参照します。

Gitは.git/refs下のファイルに格納されている参考文献のリストのみを管理します。これらの参照は、単に木のような構造として設計されていません。

階層を伝えるブランチの命名規則を使用することをお勧めします。

別の方法として、ブランチツリーを処理する拡張機能を記述することもできます。

+0

しかし、リモートを追跡するときには、(プリミティブ)ツリーのような構造を持っています...(リモートを追跡するブランチは、それがどこから来たのかを知っています) - なぜブランチはローカルから来たのかを追跡できませんか? – mgilson

+0

Gitの作成者はできるだけシンプルにしたいと思っています。ブランチにツリー構造を組み込むと、設計が複雑になります。ブランチは他のブランチから派生できるので、適切な命名スキームでブランチを整理することは問題ありません。ただし、ツリーの解釈はユーザー次第です。 – migu

0

以前のバージョンのGitでは個人的にthisアプローチを使用しましたが、ネストされたブランチはバージョン1.8以降ではサポートされていないようです。

Git TowerのUIサポートを見てうれしかったです。

enter image description here

関連する問題