【问题标题】:Cloning Android sources to a local repository server将 Android 源代码克隆到本地存储库服务器
【发布时间】:2011-05-26 10:00:34
【问题描述】:

我想使用本地 Android 存储库服务器在 Android 上进行开发。我需要将几个新的 git 存储库添加到 git 的层次结构中,并且我需要修改现有的 android 源以定制 Android。

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

我正在特别寻求有关如何使用repo 脚本与我自己的服务器交互以及如何设置manifest git 存储库并在其中管理分支的建议。

【问题讨论】:

  • 你的意思是:将多个新的 git 存储库添加到 git 的层次结构中。你的意思是你想在根 android repo 中添加一些新的文件夹层次结构。每个文件夹本身就是一个 git repo?

标签: android git android-manifest repository


【解决方案1】:

在你的 git 服务器上

  1. repo init -u https://android.googlesource.com/platform/manifest --mirror # --mirror 是关键
  2. 回购同步

因为您指定了 --mirror,所以创建的所有 repos 都将是 'bare' repos,这是创建镜像的 git 正确方法,除非您是 git uberlord。

在您的客户端上:

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

  2. 还没有 repo 同步。 您的清单可能有误。查看符号链接的 .repo/manifest.xml... 将其放入并在顶部阅读 <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 同步。它应该只从您的存储库中提取。如果没有,请停止 repo 同步,并尝试再次修复 default.xml。
  7. 一旦你在你的测试机器上看到 repo 同步工作,然后将 default.xml 提交回 (git commit; git push),这样团队中的其他人在他们 repo init; repo sync 来自你的服务器。

一旦您看到“无清单编辑”repo init; repo sync 工作,然后再次转到您的 default.xml,开始添加新的 XML 元素以及大量其他现有 Android 项目元素;这些新元素将指向您的自定义项目。对于这些新项目,只需像往常一样对它们进行 git init,并确保它们具有与相同的 <default revision="whatever_branch_you_see_here" 匹配的分支,以便 repo sync 在遇到这些新项目时会成功。

如果您确实在清单<default revision="" 元素中设置了默认分支,那么只需让每个人都设置一个本地分支以遵循修订属性中指定的远程分支。因此,例如,如果 <default revision="branch_a" 在您的清单中,则在您执行 repo 同步后,当您 cd 进入感兴趣的子项目时,请执行以下操作:

git checkout -b branch_a origin/branch_a

然后,如果用户 git push 的(据我所知,没有要推送的 repo 命令),并且如果其他人在推送之后执行 ./repo sync,他们将从原始用户...只要您使用相同的清单并实际推送到该清单指定的默认修订版(分支)。

这是最简单的食谱。如果您想创建实际的功能分支,那么如果您希望“repo 同步”正常工作,则必须更定期地编辑清单......并且您必须与其他人沟通团队在您执行此操作时获取您的清单版本。或者,如果您只是接触一两个 git repos,那么您可以像往常一样在这些 repos 上放弃 repo sync 和 git push/pull,并在您进行大量迭代时忽略其余的安静树。这听起来,最终对我来说,就像一条更简单的路径。我会尽可能地忽略回购;仅将其用于“所有项目”同步,并在您专注于 1 或 2 个项目时不理会它。

关于从上游获取更新。我认为这样做的方法是更改​​您的 default.xml 以指向您的原始 git 位置(如 android.googlesource.com),执行 repo 同步以使所有新内容合并,一旦完成同步,提交到您的仓库。我还没有这样做;所以我不能太具体,但这就是我打算这样做的方式。

我忽略了上面的服务器管理细节。例如,您需要在 git 服务器上的某个目录中调用 repo init 以使其成为可用的 git 存储库;我假设你知道如何管理你的 git 服务器。

【讨论】:

  • 谢谢你的回答,我不知道为什么我以前没有看到它。到现在为止,我可能是你所说的 git uberlord :D 我前段时间自己弄清楚了。 :)
  • @BjarkeFreund-Hansen 哇,你花了一段时间才得到你的投票 :) 迟到总比没有好。
  • 现在我无法在使用 --mirror 和 repo sync 的 repo 命令之后找到 platform/manifest.git 文件。有什么想法吗?
  • @dannynjust 我刚刚经历了这个可怕的过程时写了这个。我对它的记忆或多或少为 0。对不起:/
猜你喜欢
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2015-09-02
  • 2011-04-23
相关资源
最近更新 更多