什么是跟踪参考?

Sim*_*wsi 62 git git-extensions

当我通过Git Extensions将新分支推送到远程存储库时,我收到一条警报说

The branch {branch name} does not have a tracking reference. Do
you want to add a tracking reference for {branch name}?
Run Code Online (Sandbox Code Playgroud)

什么是跟踪参考?我发现只有少数提到跟踪谷歌的参考文献,没有真正的定义.

Eri*_*ker 28

基本思想是有纯粹的本地引用(例如,分支,标签),然后有远程跟踪引用,它遵循其他repos中发生的事情.因为Git是分散的,所以你可以选择一个与遥控器中使用的分支相同的分支名称,而不知道另一个分支的名称,这样他们对它们的工作完全不同.Git允许您这样做,但它也提供了一种将本地引用链接到远程引用的方法.

例如,请考虑以下事项:

% git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu
  remotes/origin/todo
Run Code Online (Sandbox Code Playgroud)

在这里我们有origin被叫next和的分支todo.

% git checkout -t remotes/origin/next
Branch next set up to track remote branch next from origin.
Switched to a new branch 'next'
% git branch todo    
Run Code Online (Sandbox Code Playgroud)

现在我们有一个本地分支next,它跟踪同名和本地分支的远程分支,todo不会更新更新remotes/origin/todo.

  • Sooo,嗯,任何人都想建议我们应该说YES还是NO?"你想为主人添加跟踪参考吗?" 实际上,它仍然令人困惑.通常选择什么?这两种选择都有任何好处和缺点吗?有人可以说'是',只是忘了它而没有引起任何问题吗? (18认同)
  • @NicholasPetersen,在大多数情况下,您希望避免在遥控器上为不同的工作使用相同的名称作为参考.这意味着您通常希望使用跟踪参考或选择其他名称. (5认同)
  • 是的 - 这是主要想法."对象"在Git中具有特殊含义; 它表示存储在.git/objects下面的SHA1的任何东西,所以它比"reference"更通用,但这是个主意. (2认同)

Hem*_*lle 9

本地git分支可以跟踪远程分支,这意味着git push和git pull命令将知道默认情况下推送和提取跟踪分支的提交.此外,git status将告知当前本地分支与其正在跟踪的远程分支之间的状态.当您克隆git存储库时,git将向本地主分支添加跟踪引用以跟踪远程主分支.当您从新的远程分支签出时,git将向创建的本地分支添加跟踪引用,以跟踪您签出的远程分支.

但是,如果在本地创建新分支,然后将其推送到远程存储库,则必须明确告诉git是否希望本地分支开始跟踪新的远程分支.在将本地分支推送到远程存储库时,使用-u--set-upstream选项执行此操作:git push -u origin my-new-branch.

您可以使用以下命令检查本地分支正在跟踪哪些远程分支(如果有)git branch -vv下面是输出的一个小示例.

  b1     560eb64 Added file.txt
  b2     560eb64 [origin/b2] Added file.txt
  b3     b638c18 [origin/r1: ahead 1] Added file3.txt
* master 560eb64 [origin/master] Added file.txt
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们有地方分支机构master,b1,b2b3.该master分支正在跟踪一个名为的远程分支master,该b1分支不跟踪任何远程分支,该b2分支正在跟踪一个被调用的远程分支b2,该b3分支正在跟踪一个名为的远程分支r1.git branch -vv还显示与跟踪分支相关的分支的状态.这里的分支b3在跟踪的远程分支之前是1次提交,而其他分支与它们各自的远程跟踪分支是最新的.

因此,如果您创建本地分支并推送到远程存储库,是否要向分支添加跟踪引用?通常,当您将新的本地分支推送到远程存储库时,您可以在功能上与其他开发人员协作.如果您向本地分支添加跟踪引用,则可以方便地将其他人所做的更改提取到分支,因此我想说在大多数情况下您需要添加跟踪引用.


Sim*_*wsi 6

Nick Quaranto的优秀博客git ready有一篇解释远程跟踪分支的帖子:

远程跟踪分支有几个不同的目的:

  • 它们用来链接你在本地工作的东西和遥控器上的东西.

  • 当你使用git pull或git fetch时,他们会自动知道要从哪个远程分支获得更改.

  • 更好的是,git status会识别他在远程版本的分支前面有多少提交.


小智 6

是的,您可能想添加它。在控制台中执行此操作: git branch --set-upstream-to origin/master