git push如何与android';s回购工具?
我习惯于在单个存储库中使用git push如何与android';s回购工具?,android,git,github,gerrit,repository,Android,Git,Github,Gerrit,Repository,我习惯于在单个存储库中使用git。然而,我最近一直在涉猎Android开发,并试图将我的注意力集中在repo上。我通过在.repo/local_manifests目录(我使用的是repo 1.19)中创建xmls,建立了一些定制的git repo,repo sync工作正常 当我查看自定义git回购时,他们会说,#当前未在任何分支上。这看起来就像我使用类似于git checkout abcd1234(签出提交abcd1234)的命令,而不是git checkout origin/master。至
git
。然而,我最近一直在涉猎Android开发,并试图将我的注意力集中在repo
上。我通过在.repo/local_manifests
目录(我使用的是repo 1.19)中创建xmls,建立了一些定制的git repo,repo sync
工作正常
当我查看自定义git回购时,他们会说,#当前未在任何分支上。
这看起来就像我使用类似于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之前检查代码。老实说,我对回购和Gerrit在技术上仍然有一个非常抽象的理解,如果你这样做的话
git checkout origin/master
你立刻进入超脱的状态
不管是好是坏,这正是默认情况下repo-sync
所做的-这样,清单中列出的每个存储库在刷新repo-sync
后都处于分离的头部状态
对于repo
,分离的磁头是完全正常的状态-如果原点/主机向前移动,repo-sync
也将移动您的本地状态(实际上它再次执行git-checkout-origin/master
)
然而,如果你想做出自己的改变并将其推向上游,这种奇怪的状态是不好的。在这种情况下,您可以执行以下操作之一:
repo start master .
这意味着在当前项目(
)中开始跟踪名为主
的分支
或者,您可以使用(实际上我更喜欢这个):
这两种方法将给您几乎相同的结果:您将不再处于分离的头部状态,而是位于跟踪远程分支的本地分支上
此时,您可以进行本地提交,并使用标准的git push将其直接推送到上游(但服务器策略可能不允许这样做),或者您可以提交Gerrit代码审查(强烈建议,这是大多数Android商店的默认选择)。
一旦跟踪分支到位,提交给Gerrit就非常简单
repo upload # upload changes in multiple repositories at once
或
(这假设您的清单包含了review server的正确设置)。如果您跟踪一个分支,使您不再处于分离头状态,那么当您使用
git commit
进行更改,然后使用repo sync
更新时,会发生什么情况?repo
是否进行了git合并
、git重新基址、更改是否丢失或其他操作?通过运行repo sync
您永远不会丢失本地更改。如果分支机构正在跟踪,根据repo
版本,它可能会尝试执行git pull--rebase
或git pull
(这实际上是合并)。我更喜欢通过运行显式的git pull--rebase
来覆盖这种不确定性,以确保我总是重新设置基址。@mvp让我感觉运行repo sync
非常安全。然而,我错过了关于跟踪分支的部分。如果您不在跟踪分支上,repo sync
将愉快地放弃分离头上的提交,或者离开本地分支,让您的repo指向“修订”下列出的清单中指定的git提交。至少它有礼貌地在repo sync
命令末尾列出它们。要轻松地让它们返回,请在签出之前运行git reflog
找到它们。快捷方式git checkout HEAD@{1}
适用于我分离的HEAD提交。对于那些使用GitHub或GitLab而不是Gerrit的人,我们添加了一个“repo push”命令:
repo upload # upload changes in multiple repositories at once
repo upload . # upload changes in current git repo only, fast!