我想使用本地Android存储库服务器在Android上开发。我需要在gits的层次结构中添加几个新的git存储库,我需要修改现有的android源代码来定制Android的定制。
克隆git存储库的整个Android源代码树的“正确”方法是什么,这样我可以推送/拉出公共本地存储库服务器,并且仍然可以轻松地从Android上游提取新的更改?
我特意寻找有关如何使用repo
脚本与我自己的服务器进行交互的建议,以及如何设置manifest
git存储库和管理其中的分支。
答案 0 :(得分:15)
在你的git服务器上
因为你指定了--mirror,所有创建的repos都将是'bare'repos,这是创建镜像的git-correct方法,除非你是一个git uberlord。
在您的客户端:
repo init -u git@git.yourserver.com:platform / manifest.git#您可以使用不同的方式访问您的git服务器;我必须为这个例子假设一些东西。
还没有回购同步。您的清单可能不对。看看符号链接的.repo / manifest.xml ... cat it并在顶部读取<remote fetch=""
...它可能指向android.googlesource.com。但如果它说'..'我认为意味着'回到我的服务器',所以你可以跳到第6步)。但如果它确实指向另一台服务器(不是你的),那么请转到第3步。
<remote fetch="CHANGE ME"
以指向您的git服务器git commit; git push
)中提交default.xml,以便团队中的其他人在{{1}时具有“无清单编辑”体验来自您的服务器。一旦看到“无清单编辑”repo init; repo sync
工作,再次转到default.xml,然后开始添加新的XML元素以及大量其他现有的Android项目元素;这些新元素将指向您的自定义项目。对于这些新项目,只需像往常一样git init它们,并确保它们具有匹配相同repo init; repo sync
的分支,以便<default revision="whatever_branch_you_see_here"
在遇到这些新项目时成功。
如果确实在清单repo sync
元素中设置了默认分支,那么只需让每个人都设置一个本地分支,以跟随revision属性中指定的远程分支。因此,例如,如果您的清单中有<default revision=""
,则在执行回购同步后,当您进入感兴趣的子项目时,请执行以下操作:
<default revision="branch_a"
然后,如果用户git checkout -b branch_a origin/branch_a
(根据我的意识,没有可以推送的repo命令),并且如果其他人在推送之后执行了git push
,他们将从原始用户那里获得这些更改...只要您使用相同的清单并实际推送到该清单指定的默认修订版(分支)。
这是最简单的食谱。如果你想制作实际的功能分支,那么你必须更频繁地编辑你的清单,如果你想要'repo sync'工作... 和你必须与其他人沟通当你这样做时,团队会抓住你的清单版本。或者,如果它只是一个或两个git repos你正在触摸,那么你可以放弃repo sync和git push / pull就像那些repos上的正常情况一样,并且在你重复迭代时忽略其余的安静树。这听起来最终对我来说就像一条更简单的道路。我会尽可能地忽略回购;仅将它用于“所有项目”同步,并在您专注于1或2个项目的时候单独使用它。
关于从上游获取更新。我认为这样做的方法是将default.xml更改为指向原始git位置(如android.googlesource.com),执行repo sync以使所有新东西合并,并且一旦完成同步,提交回您的回购。我还没有这样做;所以我不能太具体,但这就是我打算这样做的方式。
我忽略了上面的服务器管理细节。例如,您需要在git服务器上的某个目录中调用repo init,以使其成为可用的git存储库;我假设您知道如何管理您的git服务器。