B T*_*B T 26 java git android repository android-source
我在使用repoAndroid源代码的最小方面遇到了很多简短的问题,或者对我们使用的内容进行了非常广泛的定义,repo结果并没有真正理解发生了什么repo.我按照Android Source网站上的说明操作.我这样做是repodir因为所有文件都与此相关.
repo init -u https://android.googlesource.com/platform/manifest
repo sync
Run Code Online (Sandbox Code Playgroud)
完成后,我的文件夹中充满了android类型文件夹(bionic,bootable等等)和一个隐藏.repo文件夹.值得注意的是,有一个ics-mr1与特定版本相关的文件夹,repodir它本身包含了大部分相同的文件夹.
repo init -u https://android.googlesource.com/platform/manifest -b gingerbread
repo sync
Run Code Online (Sandbox Code Playgroud)
这相对较快地完成,我看到的主要变化是现在有一个名为的文件夹gingerbread(所有原始文件夹似乎都保留).
我现在尝试这个并且需要时间:
repo init -u https://android.googlesource.com/platform/manifest -b android_4.2.2_r1
repo sync
Run Code Online (Sandbox Code Playgroud)
之后,它仍然包含相同的gingerbread和ics-mr1一些新的随机文件夹(如abi),但似乎没有任何新版本.
从结果来看,我看到我真的不明白我的行为到底是做什么以及如何实现我想要的.
如何获取master源的整个分支的本地版本,然后在我认为合适的情况下在分支之间正确更改?我现在的方式似乎是错误的,因为分支更改后留下的文件似乎不合逻辑.
为了进一步说明,有没有一种有效的方法同时拥有众多分支的本地副本,以便我可以比较每个分支的组成部分(显然每次都不重新下载它们)?
我问这些问题有很大的理解(我无法找到明确的一致信息),所以任何有关答案的额外信息都有助于理解实际做的事情.
dco*_*cow 28
既然你看起来很精明,你知道repo只是一个python脚本,对吗?您可以阅读它以确切了解它的工作原理.我没有读完整个内容,但基本上,它包装git并提供跨多个git存储库的工作支持.我们的想法是有一个清单文件,用于指定不同版本Android的要求.当你repo init使用一个参数时,它会查看它需要克隆哪些git存储库以及你已经同步了哪些git存储库,以及它在获得正确的存储库后需要获取哪些分支.然后它处理它正在管理的所有存储库在适当的分支上.将repo视为在标准git工作流程中添加另一层(我假设您熟悉它).
第一次使用repo来获取master分支时,需要使用
repo init -u https://android.googlesource.com/platform/manifest
Run Code Online (Sandbox Code Playgroud)
然后,您需要同步服务器中的所有文件:
repo sync
Run Code Online (Sandbox Code Playgroud)
这会将您当前的工作目录更新为您下载的清单的主版本指定的确切状态.要签出不同版本的AOSP,您可以使用:
repo init -b version_name
Run Code Online (Sandbox Code Playgroud)
这会将清单更新为包含所需Android版本信息的清单(也称为分支).
别忘了同步.
要切换到另一个清单分支,
repo init -b otherbranch可以在现有客户端中使用.但是,由于这仅更新清单,因此需要后续repo sync(或repo sync -d)更新工作目录文件.
您遇到的行为可能看起来很奇怪,因为您可能不习惯使用能够轻松覆盖本地状态的系统.使用git时,你不应该在同一个目录init中多次.另一个选择是为每个项目创建新目录..repo目录的目的是存储与当前repo设置相关的所有信息(也像.git目录一样).事实上,跑步做了很多事情:repo init
我会假设克隆操作写入.repo文件夹中的信息.运行第一个命令后需要多长时间的原因:
repo init -u https://android.googlesource.com/platform/manifest
repo sync
Run Code Online (Sandbox Code Playgroud)
是因为它必须下载许多千兆字节的信息.现在,从master分支到gingerbreadrepo知道它只需要丢弃大约68个提交,这可以很快完成.
$ repo init -u https://android.googlesource.com/platform/manifest -b gingerbread
$ repo sync
...
.repo/manifests/: discarding 68 commits
...
Run Code Online (Sandbox Code Playgroud)
斜回到android_4.2.2_r1意味着repo必须再次下载这些提交所需的任何信息,并且还更新所有引用项目的当前分支.这将需要很长时间; repo正在处理磁盘使用情况以处理时间.
现在,这提出了一个问题:如果你想一次比较两个回购分支怎么办?这很难,因为当你repo init && repo sync丢失了你正在看的旧信息时.答案是复制相关信息,然后repo init && repo sync再复制.这会非常烦人 - 谢天谢地,如果你有磁盘空间,repo提供了一种加速这个过程的方法.
使事情变得更快的一种策略是在workspace/master目录中创建本地镜像.然后,在新目录中从镜像中检出所需的分支,例如workspace/gingerbread.现在,您只需更改到相应的目录即可在分支之间切换.
在本地镜像AOSP:
cd workspace
mkdir master && cd master
repo init --mirror
Run Code Online (Sandbox Code Playgroud)
将导致repo镜像本地计算机上的远程服务器.然后,当您想切换到新分支时,您可以:
mkdir ../gingerbread && cd ../gingerbread
repo init -b version_name --reference=../master
Run Code Online (Sandbox Code Playgroud)
结果是一个工作区,其中包含一个包含镜像的文件夹和一个包含姜饼分支的文件夹,该文件夹尽可能引用镜像.
另一个选项是简单地初始化和同步所需的分支,然后将该文件夹复制到另一个位置并使用该副本进行初始化和再次同步.回购应该只下载缺少的东西.
除此之外init,repo还支持将命令传递branch给给定清单中的所有不同git存储库,以便在使用代码时不必担心这一点.它还通过简化将本地更改提交到gerrit代码审查系统来促进协作.我不确定将AOSP划分为多个git存储库的官方原因是什么,但我认为这样做是为了管理版本控制的扩展问题以及为了保持项目的健壮性和容错性(如果有人)制动一个git repo它不会破坏整个AOSP).还有必要提供一种供应商可以回馈源并让他们管理自己的git存储库的方法,这些存储库可以简单地注册到/包含在总体清单中.我没有回答你的问题项目,但希望我提供了一些背景知识.
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |