mka*_*erg 7 git version-control android repo
我有一个关于使用repo切换分支的问题.我知道我可以签出这样的分支:
$ repo init ... -b foo
$ repo sync
Run Code Online (Sandbox Code Playgroud)
我的理解是,这将检查清单存储库的foo分支,然后检查清单中描述的git项目.
我也明白我可以像这样切换分支:
$ repo init ... -b bar
$ repo sync -d
Run Code Online (Sandbox Code Playgroud)
我的问题是,我是否可以在不执行repo init和repo sync的情况下切换分支,这样做有什么意义?
让我用一个例子来说明:
$ 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?
Run Code Online (Sandbox Code Playgroud)
我之前尝试过这个,它似乎工作,但它有点奇怪,因为我现在检查了foo清单中的代码,但我当前的清单分支是吧.与清单中描述的分支相比,在不同的分支上有什么含义?
注意:我读过这篇文章,我认为我的问题不同了.我知道如何切换分支.我对与当前清单中描述的分支不同的分支以及这可能如何影响我的工作流程感兴趣.
由于没有人能够回答这个问题,我做了更多的研究和实验。这是我发现的:
Tl;dr - 某些命令会做奇怪的事情。repo sync使用和时要小心repo start。尝试坚持使用简单的 git 命令。repo upload应该管用。
回购文档说回购同步相当于
$ git fetch origin
$ git rebase origin/<BRANCH>
Run Code Online (Sandbox Code Playgroud)
其中 BRANCH 是本地项目目录中当前签出的分支。然而,根据我自己的经验,repo 还会根据当前清单中的内容混淆该分支的上游跟踪信息。
事实上,继续上面的例子git checkout foo-mytopic是允许的,并且会表现得适当。存储库上传会将更改推送到正在跟踪的分支foo-mytopic( foo),但存储库同步会更改上游跟踪信息。git fetch origin在这种情况下,手动运行和可能会更好git rebase origin/<BRANCH>。
repo syncrepo init 描述的清单(和分支)在或repo start运行之前不会再次发挥作用。