将Android源克隆到本地存储库服务器

时间:2011-05-26 10:00:34

标签: android git android-manifest repository

我想使用本地Android存储库服务器在Android上开发。我需要在gits的层次结构中添加几个新的git存储库,我需要修改现有的android源代码来定制Android的定制。

克隆git存储库的整个Android源代码树的“正确”方法是什么,这样我可以推送/拉出公共本地存储库服务器,并且仍然可以轻松地从Android上游提取新的更改?

我特意寻找有关如何使用repo脚本与我自己的服务器进行交互的建议,以及如何设置manifest git存储库和管理其中的分支。

1 个答案:

答案 0 :(得分:15)

在你的git服务器上

  1. repo init -u https://android.googlesource.com/platform/manifest --mirror # - mirror是关键
  2. repo sync
  3. 因为你指定了--mirror,所有创建的repos都将是'bare'repos,这是创建镜像的git-correct方法,除非你是一个git uberlord。

    在您的客户端:

    1. repo init -u git@git.yourserver.com:platform / manifest.git#您可以使用不同的方式访问您的git服务器;我必须为这个例子假设一些东西。

    2. 还没有回购同步。您的清单可能不对。看看符号链接的.repo / manifest.xml ... cat it并在顶部读取<remote fetch="" ...它可能指向android.googlesource.com。但如果它说'..'我认为意味着'回到我的服务器',所以你可以跳到第6步)。但如果它确实指向另一台服务器(不是你的),那么请转到第3步。

    3. cd .repo / manifests
    4. vim .repo / manifests / default.xml(或任何活动的manifest.xml)。
    5. 修复default.xml的<remote fetch="CHANGE ME"以指向您的git服务器
    6. 尝试重新同步。它应该只从您的存储库中提取。如果没有,请停止repo sync,并尝试再次修复default.xml。
    7. 在您的测试计算机上看到repo sync工作后,然后在(git commit; git push)中提交default.xml,以便团队中的其他人在{{1}时具有“无清单编辑”体验来自您的服务器。
    8. 一旦看到“无清单编辑”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服务器。