我正在开发一个使用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-branch1
由feature1
创建分支(从主分支)。 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”之间的名称冲突
答案 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)