git push如何使用android的repo工具?

时间:2013-01-26 18:42:51

标签: android git github gerrit repository

我习惯将git与单个存储库一起使用。但是,我最近一直在涉及Android开发,并试图绕过repo。我通过在.repo/local_manifests目录中创建xmls来设置一些自定义git repos(我使用repo 1.19)并且repo sync正常工作。

当我查看自定义git repos时,他们会说# 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 个答案:

答案 0 :(得分:14)

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

git checkout origin/master

你立即进入分离的HEAD状态。

无论好坏,这正是repo sync默认执行的操作 - 这样清单中列出的每个存储库在新的repo sync之后都处于分离的HEAD状态。

分离的HEAD是repo完全正常的状态 - 如果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!

(这假设您的清单包含审核服务器的正确设置)。