在Android Repo项目中切换Git分支

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Android Repo项目中切换Git分支相关的知识,希望对你有一定的参考价值。

我有一个关于使用repo切换分支的问题。我知道我可以签出这样的分支:

$ repo init ... -b foo
$ repo sync

我的理解是,这将检查清单存储库的foo分支,然后检查清单中描述的git项目。

我也明白我可以像这样切换分支:

$ repo init ... -b bar
$ repo sync -d

我的问题是,我是否可以在不执行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?

我之前尝试过这个,它似乎工作,但它有点奇怪,因为我现在检查了foo清单中的代码,但我当前的清单分支是吧。与清单中描述的分支相比,在不同的分支上有什么含义?

注意:我读过this,我认为我的问题不同。我知道如何切换分支。我对与当前清单中描述的分支不同的分支以及这可能如何影响我的工作流程感兴趣。

答案

由于没有其他人能够回答这个问题,我做了一些研究和实验。这是我发现的:

Tl; dr - 某些命令会做奇怪的事情。使用repo syncrepo start时要小心。尝试坚持使用普通的git命令。 repo upload应该工作。

repo documentation说repo sync相当于

$ git fetch origin
$ git rebase origin/<BRANCH>

其中BRANCH是本地项目目录中当前签出的分支。但是,根据我自己的经验,repo还会根据当前清单中的内容搞乱该分支的上游跟踪信息。

为了继续上面的例子,git checkout foo-mytopic实际上是允许的,并且会表现得恰到好处。回购上传会将更改推送到foo-mytopic正在跟踪的分支(foo),但是repo sync会改变上游跟踪信息。在这种情况下,可能更好地手动运行git fetch origingit rebase origin/<BRANCH>

repo init描述的清单(和分支)在repo syncrepo start运行之前不会再次发挥作用。

以上是关于在Android Repo项目中切换Git分支的主要内容,如果未能解决你的问题,请参考以下文章

Android 代码开发工作流

在 Visual Studio 2015 git repo 中切换分支时发生错误,无法 rmdir 访问被拒绝

git入门(6.repo)

android studio 怎么切换git分支

[Android] Anreoid repo 切换分支

git 切换远程分支