我有一个git本地分支,跟踪远程svn中继。
我创建了一个新的开发分支,并设置了本地分支来对其进行跟踪。
我希望开发部门也跟踪svn / trunk 像这样:
from:
local branch > development branch
to:
local branch > development branch > svn/trunk
可以用git吗?
我正在使用 git版本2.14.3
git GUI-smartgit v18.1
答案 0 :(得分:1)
否,这在Git中是不可能的。但这也不是那么重要(真的!),因为在Git中跟踪分支只是意味着一个分支将另一个集合设置为其上游:
git branch --set-upstream-to=desired-upstream my-branch
您的每个分支机构随时可以最多 个上游。当您的分支没有处于上游时,会发生以下情况:
git fetch
知道哪个其他Git存储库可能包含要提取的提交。因此,您可以运行git fetch
而不是git fetch remote
。
但是,如果您只有一个名为origin
的远程服务器(这很常见),那么这并不会真正为您买任何东西,因为没有参数的git fetch
会从origin
获取从上游没有更好的选择。换句话说,git fetch
已经从(单个)正确的远程获取。因此,在这里上游没有买到任何东西。
git merge
和git rebase
在没有其他参数的情况下运行会自动知道要使用的远程跟踪名称。这确实为您买了东西,但是如果您想拥有两个上游,您仍然必须告诉git merge
或git rebase
哪个上游即可使用,因此不必键入git merge fred/xyzzy
和git merge giselle/xyzzy
确实没有什么差劲。实际上,它可能更好:git merge upstream1
和git merge upstream2
的键入较短,但是fred/xyzzy
是上游#1还是上游#2?为什么不使用更难忘的名称?
像上面的其他两个命令一样,git pull
(仅运行其他两个命令,先获取然后再获取其他两个命令之一)也知道默认情况下使用什么。我建议大多数Git用户避免 git pull
,因为这本来是一种便捷命令,但在最坏的情况下往往会带来不便。如果您避免使用git pull
,则知道事情不会为您带来任何好处。
使用git push
的标准push.default
设置可以使默认simple
的行为更好。 确实为您买了东西,但是您无论如何应该只应该推送到另一个Git存储库,因此您可以选择该特定的其他Git存储库作为分支的上游(单个)。
最后,git status
命令(一些其他Git命令运行或运行的一部分)的信息更加丰富,告诉您在所选上游之前和之后有多少个提交。这也包括git branch -v
。我发现这具有重要价值。
幸运的是,有一种简单的方法可以从命令行获取相同的信息,并且您可以创建一个别名或脚本来为您执行此操作。当git status
表示您“领先1”和/或“落后3”时,它运行的等效项是:
git rev-list --count --left-right <local-name>...<upstream-name>
例如,在分支stash-exp
以origin/master
作为上游的情况下,我可以运行:
git rev-list --count --left-right stash-exp...origin/master
并获得相同的两个数字(作为原始数字):第一个是“提前”计数,第二个是“落后”计数。请注意此处的三个时期.
;这种形式的命令和选项需要全部三个,而大多数命令大多使用两点语法。
总之,然后设置一个上游,以便某些本地分支名称跟踪某些远程跟踪名称或某些其他本地分支名称的成本非常低(一个命令),并且具有明显的好处,因此您应该在有意义的时候做。但是,好处不是要 拥有多个上游。