23

我有一个使用 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(从 master 分支)创建。例如:

$ 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 branch 简单地按分支的来源组织分支(带有一点额外的缩进)可能对我的目的来说已经足够了......虽然如果我能获得超级奖励积分:

$ git branch
  feature1
       testing
  feature2
       testing
  bugfix1
       sub-branch-foo

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

4

3 回答 3

19

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

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

于 2012-06-15T13:34:14.657 回答
3

Git 中的分支实际上是 Git 对象存储中键的符号引用。引用文档(“什么是分支”)

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

Git 仅管理存储在.git/refs. 这些引用根本没有设计为树状结构。

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

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

于 2012-06-15T13:39:31.613 回答
0

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

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

在此处输入图像描述

于 2013-10-16T21:32:35.083 回答