首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我们所说的“分支”到底是什么意思?

我们所说的“分支”到底是什么意思?
EN

Stack Overflow用户
提问于 2014-08-01 04:41:26
回答 2查看 6.1K关注 0票数 41

长话短说。

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

  1. 一个指向提交的非符号引用/指针,
  2. 这样一个引用的名称(例如"master"),
  3. 存储库的提交DAG的子图,它由这样一个引用所指向的提交可到达的所有提交组成。

然而,我看到这个术语显然指的是除了这三种可能的用法之外的其他东西(下面有更多详细信息)。在Git上下文中,我上面的列表中还缺少术语“分支”的其他有效且明确的用法吗?

更多细节

在使用Git大约一年之后,我正在为CS学生准备一个简短的教程。我真的很想明确Git的术语,以避免任何混淆。

当然,我使用Git分支已经有一段时间了;我觉得使用它们很舒服,而且发现Git分支模型很棒。然而,我仍然发现术语“分支”有问题和含糊不清,因为它似乎指的是至少两个不同的东西,这取决于它使用的上下文...有时甚至在同一教程/手册中。

用法1: branch =提交的指针/引用

Pro Git书(3.1 - What a branch is格式),在显示了下面的图表后,

继续将分支定义为

只是指向其中一个提交的轻量级可移动指针。

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

我对这个定义非常满意。我认为分支仅仅是指向DAG中特定提交的引用,分支的“提示提交”就是该引用所指向的提交。到现在为止还好。等等..。

用法2:分支= DAG的子图

Atlassian Git tutorial按如下方式引入分支:

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

他们的意思是,我猜,是一串提交。让我来提炼一下这个想法。对我来说唯一有意义的解释是,术语“分支”也可以指代存储库的提交DAG的子图,该子图由从tip commit考虑的可到达的所有提交组成。

然而,例如,Pro Git书也包含以下图表(参见3.4 - Branching workflows)。

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

我发现这种用法不明确和模糊,因为如果我在那个阶段绘制DAG,而不知道分支引用在过去所指向的位置,也不假设三个分支之间有任何层次结构,那么我得到的结果就是

我还发现其他Git学习资源中的一些图表令人困惑。请特别考虑以下内容(取自Lynda.com - Git Essential Training的介绍视频):

在这里,master的提示实际上是534de ( HEAD指向master),但是“主”标签在图中的位置非常容易误导。在这种情况下,这个标签应该描述的是什么,我不清楚...

编辑分支:我后来找到了这个分支;分支部分呼应了我上面的评论。

EN

Stack Overflow用户

回答已采纳

发布于 2014-08-01 17:04:14

你是对的。

我们可以通过分离“本地”和“远程”分支标签来进一步拆分您的项目1:本地分支(本地标签)是以refs/heads/开头(在内部-许多前端命令将其隐藏)的名称,而“远程分支”-which也称为带有refs/remotes/的“远程跟踪分支”-start,然后在命名分支的部分之前有一个路径组件命名特定的远程。(编辑,2018年4月:我不喜欢“远程分支”或“远程跟踪分支”这个短语;我认为只调用这些远程跟踪名称会更好。但是有很多现有的文档使用了另外两个短语,所以我们需要注意这种用法。)

例如,您无疑熟悉refs/remotes/origin/master,但是如果您有一个名为bob的遥控器,那么您也可能拥有跟踪Bob的hacks/feeprefs/remotes/bob/hacks/feep

名为refs/heads/branch的本地分支具有一个与众不同的特性,即git checkout会默认将您“放在”该分支上,方法是将该名称写入特殊的HEAD引用;一旦以这种方式设置它,就会出现新的提交(由git commitgit mergegit cherry-pick等创建)。将新提交的SHA-1写入到分支文件中。(新的提交将旧的分支尖端作为其父级或父级之一。)

我尝试使用诸如“分支提示”之类的术语来明确地表示诸如refs/heads/master之类的分支名称所指向的提交,使用“分支名称”或“本地分支名称”来引用名称本身(无论是否以refs/heads/作为前缀),并且-我认为这是最不成功的-“分支结构”来引用refs/heads/子集。然而,假设一个DAG具有如下的分叉和合并:

代码语言:javascript
运行
复制
         o--o
        /    \
...-o--o      o--o-...
        \    /
         o--o

有时,我想把这个小苯环状物体的一个或另一半也称为“分支”,但我对此并没有真正合适的术语。

(顺便说一句,如果您是一名拓扑学家,Atlassian图也可以线性绘制,这一事实不会困扰您。然而,正如一个古老的笑话所说,拓扑学家们一直试图从他们的甜甜圈中喝水,吃他们的咖啡杯,因为每个杯子都只是一个环面。)

票数 11
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25068543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档