【问题标题】:Are there different meanings to the concept of 'tracking' in git?git中的“跟踪”概念有不同的含义吗?
【发布时间】:2011-10-01 15:50:27
【问题描述】:

我运行 'git branch -r' 并得到

原点/分支1

原点/分支2

在手册页中,-r 选项将“列出或删除(如果与 -d 一起使用)远程跟踪分支”。所以 origin/branch1 和 origin/branch2 被称为远程跟踪分支。但是,您不能直接提交到远程跟踪分支(将创建一个匿名分支)。远程跟踪分支只是在运行 'git fetch' 时跟踪远程分支。

这里的语义对我来说有点模糊。如果我那么

git checkout -b branch1 origin/branch1

我得到以下输出: "分支 branch1 设置为从源跟踪远程分支 branch1。切换到新分支 'branch1'"

这是我的问题,尽可能详细地说明是什么让我感到困惑...... 由于将 branch1 设置为从源跟踪远程分支 branch1,因此是否将“branch1”视为远程跟踪分支?如果是这样,这是否与运行 'git branch -r' 时'origin/branch1' 已被列为远程跟踪分支的事实相冲突?据我了解,存在本地(主题)分支或远程跟踪分支。运行“git checkout -b branch1 origin/branch1”时,我是否创建了一个本地(主题)分支(我可以在其上添加提交),它通过获取来跟踪远程分支?运行“git branch”现在给出:“* branch1”,运行“git branch -r”仍然给出“origin/branch1”和“origin/branch2”。我创建了 branch1 来添加提交并跟踪 origin/branch1。哪个被认为是远程跟踪分支,'git branch' 的输出中的'branch1',或'git branch -r' 的输出中的'origin/branch1'?

【问题讨论】:

标签: git branch tracking git-checkout


【解决方案1】:

这是一个关于 git 术语特别烦人的好问题,尽管项目似乎正在慢慢修复。

基本上,“跟踪”在表达式(a)“远程跟踪分支”和(b)“branch1 设置为从origin 跟踪远程分支branch1”中表示非常不同的东西。下面是一个简短的总结:

  1. “远程跟踪分支”:远程跟踪分支是通常由git fetch 更新的分支,因此,git pull。¹您可以将这些视为状态缓存远程存储库中的分支。你可以合并它们,检查它们的历史,等等,但你不能直接处理它们。该短语中的“跟踪”表示远程跟踪分支表示上次更新远程跟踪分支时远程存储库中分支的状态。
  2. Branch foo 设置为从 origin 跟踪远程分支 bar:在这句话中,您被告知的是该 git 设置了配置变量,将您的本地分支 foo 与远程跟踪分支 origin/bar 相关联。这启用了一些不错的功能,例如当您在分支foo 上时只需键入git pull 即可获取然后从origin/bar 合并。这也是您如何获得有关您的分支相对于远程跟踪分支的状态的消息的方式,例如“您的分支 fooorigin/bar 提前 24 次提交可以快速转发”。您被告知您的本地分支正在跟踪 已与远程跟踪分支相关联。您还听说这被称为origin/bar 相对于foo上游

所以,这些跟踪/跟踪的感觉是完全不同的,遗憾的是,这是一个常见的混淆来源。

然而,第二种含义似乎正在慢慢被弃用 - 例如,push.default 的可能选项之一曾经是 tracking,但现在已弃用,取而代之的是选项名称 upstream


所以,直接回答你的问题:

由于将 branch1 设置为从源跟踪远程分支 branch1,因此“branch1”是否被视为远程跟踪分支?

不,branch1 不是远程跟踪分支。

当运行 'git checkout -b branch1 origin/branch1' 时,我是否正在创建一个本地(主题)分支(我可以在其上添加提交),它通过获取来跟踪远程分支?

嗯,有点——它正在跟踪(意义 2)一个远程跟踪分支,后者是通过获取从远程存储库中的一个分支更新的。 (就我个人而言,我尽量避免使用“远程分支”这一术语,而倾向于使用“远程存储库中的分支”,以防人们认为您指的是远程跟踪分支。)

现在运行 'git branch' 给出:'* branch1',运行 'git branch -r' 仍然给出 'origin/branch1' 和 'origin/branch2'。我创建了 branch1 来添加提交并跟踪 origin/branch1。哪个被认为是远程跟踪分支,'git branch' 的输出中的'branch1',或'git branch -r' 的输出中的'origin/branch1'?

远程跟踪分支是origin/branch1


¹ 当您成功向远程存储库中的相应分支发送git push 时,它们也会更新。

【讨论】:

  • 这确实有助于澄清事情,谢谢马克!因此,诀窍是从创建的本地可编辑分支“跟踪”(或更恰当地说,“关联”)远程存储库的分支的意义上来看待它,并且远程跟踪分支仅反映远程端的内容并且不能被编辑。感谢您帮助确认我的怀疑,即 git 中的“轨道”一词确实有两个含义。
  • 'remote (tracking) branch' 是我们在本地存储库中得到的;而“远程存储库中的分支”是远程存储库中的某些东西,尽管前者本质上会跟踪后者。所以:(A)我认为我们不应该混合它们; (B) 在名称“远程(跟踪)分支”中,不应使用“跟踪”以避免与本地跟踪分支混淆。
猜你喜欢
  • 1970-01-01
  • 2016-09-02
  • 2021-12-24
  • 1970-01-01
  • 2012-09-23
  • 2021-09-15
  • 1970-01-01
  • 2022-07-27
  • 2017-09-02
相关资源
最近更新 更多