如何使用Android的回购工具的git推工作?

我习惯于使用一个仓库的git 。 然而,我最近一直在涉足Android开发,并试图围绕repo包头。 我通过在.repo/local_manifests目录中创buildxmls来设置一些自定义的git repos(我使用的是repo 1.19),并且repo sync工作正常。

当我看着自定义的git回购,他们说# Not currently on any branch. 这看起来就像当我使用git checkout abcd1234 (检出commit abcd1234)而不是git checkout origin/master 。 至于做出改变,我不知道如何推回原点。 这是我的常规git工作stream程。

 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有非常抽象的理解。

Solutions Collecting From Web of "如何使用Android的回购工具的git推工作?"

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

 git checkout origin/master 

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

无论更好还是更糟糕,这正是repo sync默认做的 – 这样,清单中列出的每个存储库在新鲜repo sync后都处于分离的HEAD状态。

分离HEAD是非常正常的状态repo – 如果起源/主要向前移动, repo sync也将移动您的本地状态(实际上它再次混合git checkout origin/master )。

然而,如果你想做出自己的改变并将它们推向上游,这种怪异的状态就不好。 在这种情况下,您可以执行以下任一操作:

 repo start master . 

这意味着在当前项​​目( . )中开始跟踪叫做master分支。

另外,你可以使用(我更喜欢这个,实际上):

 git checkout --track origin/master 

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

在这一点上,您可以使用标准的git push (但这可能不被服务器策略所允许)直接向上游推送它们,或者您可以提交Gerrit代码审查(强烈推荐,并且是大多数Android商店的默认select)。 一旦跟踪分支到位,提交给Gerrit就像

 repo upload # upload changes in multiple repositories at once 

要么

 repo upload . # upload changes in current git repo only, fast! 

(这假设你的清单包含适当的设置审查服务器)。