我习惯将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之前查看代码。老实说,我对repo
和Gerrit
仍然有一个非常抽象的理解。
答案 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!
(这假设您的清单包含审核服务器的正确设置)。