组织git分支

时间:2012-06-15 13:09:55

标签: git branch

我正在开发一个使用git作为VCS的大型项目。在任何给定的时间我都在努力实现一些功能/错误修正等。对于任何给定的功能/错误,创建分支层次结构会很好 - 例如。

$ 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

是否可以做这样的事情,或者我是否需要采用更原始的命名方案?

编辑

为了使它更具体,我正在寻找,如果feature1是一个git分支,那么在上面的例子中,sub-branch1将全部由git checkout -b sub-branch1feature1创建分支(从主分支)。 e.g:

$ 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

通过某种方式管理“feature1 / testing”和“feature2 / testing”之间的名称冲突

3 个答案:

答案 0 :(得分:17)

您可以使用命名模式,如feature1 / sub-brancha,feature2 / sub-branchb等,名称中的斜杠对git不是问题。但是,分支仍将作为普通分支处理(但我不知道如何以不同的方式处理子分支)。 git branch命令将列出当然具有全名的分支,而不是它在示例中的方式。

有趣的是,包含斜杠的命名模式将在.git / refs / heads /中创建目录层次结构。也许这对于使用一些低级命令处理子分支很有用吗?

答案 1 :(得分:3)

Git中的分支实际上是Git对象存储中键的符号引用。引用文档("What is a branch")

  
    

当我们需要精确时,我们将使用“branch”这个词来表示开发线,而“branch head”(或者只是“head”)则表示对分支上最近提交的引用。在上面的示例中,名为“A”的分支头是指向一个特定提交的指针,但是我们引用导致该点的三个提交行,因为它们都是“分支A”的一部分。

  

Git只管理存储在.git/refs下的文件中的引用列表。这些引用根本就不是设计为树状结构。

我建议使用传达层次结构的分支命名方案。

另一种可能性是编写一个为您处理分支树的扩展。

答案 2 :(得分:0)

我个人在早期版本的Git中使用过this方法,但似乎版本1.8 +中不再支持嵌套分支。

在Git Tower中看到UI支持也很高兴。

enter image description here