git push与Android的repo工具如何配合工作?

13

我习惯于使用单个存储库的git。然而,最近我开始接触Android开发并尝试理解repo。我通过在.repo/local_manifests目录中创建XML文件来设置一些自定义的git存储库(我正在使用repo 1.19),并且repo sync正常工作。

当我查看这些自定义git存储库时,它们显示为# Not currently on any branch.。这看起来就像我使用命令git checkout abcd1234(检出提交abcd1234)而不是git checkout origin/master时的情况类似。至于如何进行更改,我不确定如何推回到原始版本。这是我的普通git工作流程。

git checkout origin/master
#make changes to working directory
git add .
git commit -m 'useful message'
#assume time has passed and there could be changes upstream
git fetch
git rebase origin/master
git push origin master

现在我不再处于一个分支上,我该如何推送更改?我知道有一个工具叫做repo upload,但我不太确定它是如何工作的。虽然我从未使用过Gerrit,但也许值得设置它,这样其他团队成员就可以在代码推送到Github之前审核代码。老实说,我对repoGerrit仍然有非常抽象的理解。

1个回答

17

从技术上讲,如果你这么做

git checkout origin/master

执行repo sync命令后,你将立即进入分离HEAD状态。

不管好坏,这正是repo sync默认所做的——刷新repo sync后,清单中列出的每个仓库都处于分离HEAD状态。

对于repo来说,分离HEAD状态是完全正常的状态——如果origin/master前进了,repo sync也会将本地状态移动到相应位置(其实相当于再次执行git checkout origin/master)。

然而,如果你想自己进行更改并将其推送到上游,则这种奇怪的状态就不好了。这时,你可以选择以下操作之一:

repo start master .

这意味着在当前项目 (.) 中跟踪名为 master 的分支。

或者,您可以使用(实际上我更喜欢这种方式):

git checkout --track origin/master

两种方法都将给你几乎相同的结果:你将不再处于分离 HEAD 状态,而是在本地分支上跟踪远程分支。

此时,您可以使用标准的 git push 直接推送本地提交到上游(但这可能不被服务器策略允许),或者您可以提交给 Gerrit 代码审查(强烈推荐并且是大多数 Android 商店的默认选择)。 一旦跟踪分支就位,提交至 Gerrit 就像下面这样简单:

repo upload     # upload changes in multiple repositories at once
或者
repo upload .   # upload changes in current git repo only, fast!

(这假定你的清单文件包含适当的审核服务器设置。)


1
如果您跟踪一个分支,以便不再处于分离的HEAD状态,那么当您使用git commit进行更改并稍后使用repo sync更新时,会发生什么? repo会执行git mergegit rebase,更改会丢失还是其他操作? - redbmk
3
通过运行 repo sync 命令,您不应该会丢失本地修改。如果分支正在跟踪,则根据 repo 版本的不同,它可能会尝试执行 git pull --rebasegit pull(实际上执行合并)。我更倾向于通过显式运行 git pull --rebase 命令来覆盖这种不确定性,以确保始终进行变基操作。 - mvp
@mvp 让我在运行 repo sync 时感到非常安全。然而,我错过了跟踪分支的部分。如果你不在跟踪分支上,repo sync 将会快乐地丢弃你在分离 HEAD 上的提交,或者留下你的本地分支,并将你的存储库指向清单中“修订版”下列出的 git 提交。至少它有礼貌地在 repo sync 命令的末尾列出它们。要轻松地获取它们,请在检出之前运行 git reflog 查找它们。对于我的分离 HEAD 提交,快捷方式 git checkout HEAD@{1} 很有效。 - remcycles
1
对于那些使用GitHub或GitLab而不是Gerrit的人,我们添加了一个“repo push”命令:https://github.com/wavecomp/git-repo - John McGehee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接