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

标签 android git android-manifest repository

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

克隆git存储库的整个Android源代码树的“正确”方法是什么,以便我可以将其 push/拖出到公共(public)本地存储库服务器,还是可以轻松地从Android上游获取新更改?

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

最佳答案

在您的git服务器上

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

  • 因为您指定了--mirror,所以所有创建的存储库都将是“裸机”存储库,这是创建镜像的git-correct方法,除非您是git uberlord。

    在您的客户上:
  • repo init -u git@git.yourserver.com:platform/manifest.git#您可以使用其他方式访问git服务器;在这个例子中,我必须假设一些东西。
  • 还没有 repo 同步。您的 list 可能是错误的。查看符号链接(symbolic link)的.repo/manifest.xml ...,将其收起来,并在顶部阅读<remote fetch="" ...,它可能指向android.googlesource.com。但是如果显示“..”,则表示“返回到我的服务器”,因此您可以跳到步骤6)。但是,如果确实指向其他服务器(而不是您的服务器),请转到步骤3。
  • cd .repo/manifests
  • vim .repo/manifests/default.xml(或任何 Activity 的manifest.xml是)。
  • 修复default.xml的<remote fetch="CHANGE ME"以指向您的git服务器
  • 尝试 repo 同步。它只能从您的存储库中提取。如果不是,请停止 repo 同步,然后再次尝试修复default.xml。
  • 一旦您看到测试机上的仓库同步工作正常,请再次提交default.xml(git commit; git push),以便团队中的其他人从服务器上获得repo init; repo sync时将具有“无 list 编辑”的经验。

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

    如果确实在 list <default revision=""元素中设置了默认分支,则只需让每个人都设置一个本地分支,以遵循修订属性中指定的远程分支即可。因此,例如,如果 list 中包含<default revision="branch_a",则在执行 repo 同步之后,当您将CD放入感兴趣的子项目中时,请执行以下操作:
    git checkout -b branch_a origin/branch_a
    然后,如果用户git push(据我所知,没有要推送的repo命令),并且如果其他人在该推送后执行了./repo sync,则他们将从原始用户那里获得这些更改...只要您使用相同的 list ,并实际推送到该 list 指定的默认修订版(分支)。

    那是最简单的食谱。如果您想创建实际的功能分支,那么如果您想使“repo sync”正常工作,则必须更定期地编辑 list ...,并且您必须与团队的其他成员进行交流,以获取您的版本。这样做时的 list 。或者,如果您只是触摸一个或两个git仓库,则可以像在这些仓库上一样正常地放弃repo sync和git push/pull,而在进行大量迭代时忽略其余的静默树。最终,对我来说,这听起来像一条更简单的道路。我会尽可能地忽略 repo ;仅将其用于“所有项目”同步,而在您专注于1或2个项目时则不使用它。

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

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

    关于android - 将Android源克隆到本地存储库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6136789/

    相关文章:

    android.database.sqlite.SQLiteException :

    java - float 比较不匹配

    Git 使用远程 merge

    android - Google Play 中的手机和平板电脑过滤器

    java - AndroidManifest 中的工具替换

    java - 用于序列化/反序列化 unix 时间戳的 Gson 日期格式

    android - Flutter:使用 Kotlin 创建 Flutter 项目

    预推钩中的 git commit

    git - 设置 Gitolite 时出错 : Doesn't accept SSH key

    android - "id"下的红色波浪线