Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git push如何与android';s回购工具?_Android_Git_Github_Gerrit_Repository - Fatal编程技术网

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!