我有一个关于使用repo切换分支的问题。我知道我可以签出这样的分支:
$ repo init ... -b foo
$ repo sync
我的理解是,这将检查清单存储库的foo分支,然后检查清单中描述的git项目。
我也明白我可以像这样切换分支:
$ repo init ... -b bar
$ repo sync -d
我的问题是,我可以切换分支而无需执行repo init&每次重新同步,这样做的含义是什么?
让我举一个例子说明:
$ repo init ... -b foo
$ repo sync -d
$ repo start foo-mytopic proj1 proj2
... make some commits ...
$ repo upload -t
$ repo init ... -b bar
$ repo sync -d
$ repo start bar-topic proj1 proj3
$ repo upload -t
$ cd proj1
$ git checkout foo-mytopic # IS THIS ALLOWED?
我之前尝试过这个,它似乎有效,但它有点奇怪,因为我现在检查了 foo 清单中的代码,但我当前的清单分支是杆即可。与清单中描述的不同的分支有什么影响?
注意:我已阅读this,我认为我的问题不同。我知道如何切换分支。我对与当前清单中描述的分支不同的分支以及这可能如何影响我的工作流程感兴趣。
答案 0 :(得分:3)
由于没有其他人能够回答这个问题,我做了一些研究和实验。这是我发现的:
Tl; dr - 某些命令会做奇怪的事情。使用repo sync
和repo start
时要小心。尝试坚持使用普通的git命令。 repo upload
应该有用。
repo documentation表示回购同步等同于
$ git fetch origin
$ git rebase origin/<BRANCH>
其中BRANCH是本地项目目录中当前签出的分支。但是,根据我自己的经验,repo还会根据内容中的内容混乱该分支的上游跟踪信息。目前的清单。
为了继续上面的例子,git checkout foo-mytopic
实际上是允许的,并且会表现得恰到好处。回购上传会将更改推送到foo-mytopic
正在跟踪的分支(foo
),但回购同步会更改上游跟踪信息。在这种情况下,最好手动运行git fetch origin
和git rebase origin/<BRANCH>
。
在repo sync
或repo start
运行之前,repo init描述的清单(和分支)不会再次发挥作用。