13

我习惯于使用git单个存储库。但是,我最近一直在涉足 Android 开发,并试图将我的头脑围绕在repo. 我通过在.repo/local_manifests目录中创建 xmls 设置了一些自定义 git repos(我使用的是 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 之前对其进行审查。repo老实说,我对和的理解仍然非常抽象Gerrit

4

1 回答 1

17

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

git checkout origin/master

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

无论好坏,这正是repo sync默认情况下所做的 - 这样清单中列出的每个存储库在 fresh 之后都处于分离的 HEAD 状态repo sync

分离的 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!

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

于 2013-01-27T07:11:54.470 回答