"branch"指的是什么?

10 浏览
0 Comments

"branch"指的是什么?

长话短说...

据我所知,在Git术语中,“分支”可能指的是相关但不同的事物:

  1. 一个非符号引用/指向提交的指针,
  2. 这种引用的名称(例如“master”),
  3. 由此类引用指向的提交所构成的存储库提交DAG的子图。

然而,我看到这个术语被用来显然指的是除了这三种可能的用法之外的其他东西(下面有更多细节)。在Git环境中,是否存在其他有效和明确的“分支”术语用法,我的上述列表没有包含?

更多细节

在使用Git大约一年后,我正在为计算机科学学生准备一个简短的教程。我真的希望搞清楚Git的术语,以避免任何混淆。

当然,我已经使用Git分支一段时间了;我习惯使用它们,并且认为Git的分支模型很棒。然而,我仍然认为“分支”这个术语存在问题和歧义,因为它似乎根据使用它的上下文而表示至少两种不同的事物...有时甚至在同一个教程/手册中。

用法1:分支=指向提交的指针/引用

在《Pro Git》书中(在3.1 - What a branch is),在展示以下图表之后,

enter image description here

继续将分支定义为

只是指向这些提交之一的轻量级可移动指针。

据我所知,这也是Git手册中“分支”一词的含义。

我对这个定义非常满意。我认为分支只是指向DAG中特定提交的引用,分支的“顶部提交”是由该引用指向的提交。到目前为止,一切顺利。但等等...

用法2:分支=存储库的DAG子图

Atlassian Git教程如下介绍分支:

一个分支代表一个独立的开发线。

他们的意思是一系列的提交。让我澄清一下...对我来说唯一有意义的解释是,术语“分支”也可以指代由顶部提交考虑而成的存储库提交DAG的子图

然而,《Pro Git》书中也包含以下图表(见3.4 - Branching workflows),

enter image description here

这似乎与我的解释相矛盾,因为它似乎暗示只有提交C2-C5(而不是C1)属于develop分支,只有提交C6-C7(而不是C1-C5)属于topic分支。

我发现这种用法模糊和含糊,因为如果我在那个阶段绘制DAG,不知道分支引用过去指向了哪里,也不假设任何分支之间的层次关系,我只会得到

enter image description here

我也觉得其他Git学习资源中的一些图表令人困惑。特别是考虑以下图表(来自Lynda.com - Git Essential Training的介绍视频):

enter image description here

在这里,master的顶端实际上是534deHEAD指向master),但是图表上“master”标签的位置非常误导人。在这种情况下,该标签应该描述的是什么对我来说不明确...

编辑:我后来在Marc的博客上找到了这篇优秀的文章;其中的“分支”部分呼应了我上面的评论。

0
0 Comments

什么是“分支”?这个问题的出现原因是对术语的含义和使用的混淆。在Git中,“分支”一词有多种含义,包括本地分支、远程分支和分支结构。为了更清楚地理解和使用这些术语,需要对它们进行明确的定义和区分。

首先,本地分支是以refs/heads/开头的名称,可以通过git checkout命令自动切换到该分支。新的提交会被写入该分支文件中。而远程分支,也称为“远程跟踪分支”,以refs/remotes/开头,后面跟着指定远程的路径,然后是分支的名称。

然而,“分支”一词还可以用来表示DAG(有向无环图)的子集,如图中的一条分支。但是目前还没有一个准确的术语来描述这种情况。

为了解决术语的混淆,提出了一些新的术语,如“分支尖端”表示分支名称所指向的提交,“分支名称”或“本地分支名称”表示分支的名称本身,而“分支结构”表示DAG的子集。

此外,还提出了一些替代术语的建议,如“分支历史”、“分支祖先”和“DAGlet”。但是这些术语都有一定的局限性和歧义性。

最后,为了更清楚地区分不同类型的分支,建议使用“远程跟踪名称”来代替“远程分支”。同时,也希望能找到一个不使用“分支”一词的术语来描述“分支名称”。

通过对术语的明确定义和区分,可以更准确地理解和使用“分支”的概念,并避免术语混淆带来的困惑。

0
0 Comments

什么是“分支”这个问题的出现原因可能是因为有人对Git中分支的概念产生了疑惑。在给出的内容中,通过引用了一个网站的链接,解释了在Git中分支是指从某个提交指向的“可达”提交。接着,通过一个Pro Git的例子,说明了一个分支包含了从该分支指向的提交开始,一直到该提交所指向的提交之间的所有提交。在Git中,没有其他关于提交“在一个分支上”的概念,你是正确的,可以将有向无环图(DAG)线性地重绘。

至于解决方法,给出的内容中提到了一个名为“Think Like a Git”的教程链接,认为这是一个非常有帮助的Git参考资料。所以,解决这个问题的方法可能是通过学习和参考相关的资料和教程来理解Git中分支的概念和用法。

0