The repo start
命令基于当前上游分支创建本地分支。跑步repo upload
将上传当前签出分支上的所有本地提交,以供审核到清单文件中列出的 Gerrit 服务器托管的上游分支。如果您想要执行的推送类型与此用例不匹配,您将必须使用底层 Git 命令进行推送。您仍然可以使用repo start
虽然(但你不必)。
要创建清单分支,repo start
and repo upload
没有用。与 Repo 管理的其他 git 不同,您应该对清单 git 进行所有更改default
Repo 为您检查的分支。然后,使用普通的 Git 命令来推送更改。
以下示例展示了如何创建一个名为的新清单分支mybranch
,与当前上游相同。
cd .repo/manifests
git push origin default:refs/heads/mybranch
现在,这本身并不是很有用,因为您的清单的内容与上游分支相同 - 我们刚刚克隆了清单的该分支,所以当您can run
repo init -u ssh://git.example.com/platform/manifest -b mybranch
结果将与您开始时的结果相同:
repo init -u ssh://git.example.com/platform/manifest -b android-4.2.2_1
为了使您的镜像有用,您还必须对清单中列出的每个 git 进行分支,以便您在服务器上获得一个可以进行更改的分支。
理论上,您可以对从上游下载的相同分支进行更改,但是当您下次尝试从上游同步时,这会造成混乱。不要那样做。
要在服务器上创建分支,您可以遵循与清单相同的模式:
cd build
git push ssh://git.example.com/platform/build HEAD:refs/heads/mybranch
请注意 HEAD 的使用,它是当前签出的提交的符号名称。对每个 git 执行此操作非常乏味,因此请使用repo forall
命令:
repo forall -c 'git push aosp HEAD:refs/heads/mybranch'
请注意,远程名称与清单 git (IIRC) 不同。
See repo help forall
用于运行命令的可用环境变量列表repo forall
(REPO_PROJECT
, $REPO_LREV
, and $REPO_RREV
可能是最有用的)。
很容易搞砸repo forall
,所以养成在命令前面加上前缀的好习惯echo
首先要有命令会被运行回显到您的终端。如果您对结果满意,请删除echo
真正运行命令。
现在你将拥有一个mybranch
分支在你所有的git中,包括清单。剩下的就是改变清单,以便
repo init -u ssh://git.example.com/platform/manifest -b mybranch
实际上会检查mybranch
在所有的混蛋中。
cd .repo/manifests
vi default.xml
[ Change the default revision from refs/tags/android-4.2.2_1
or whatever it says to 'mybranch'. ]
git commit -a -m 'Changed default revision to mybranch.'
git push origin default:refs/heads/mybranch
请注意,所有 git 不一定都使用默认修订版(您刚刚将其更改为mybranch
)。 android-4.2.2_1 清单分支可能就是这种情况,但在其他情况下,某些 git 不会使用默认修订版,而是用自己的修订版属性覆盖它。这完全没问题,但它需要您进行额外的清单更改。