【发布时间】:2010-03-15 21:24:08
【问题描述】:
当我想获取 Android 源代码时,我知道我必须使用“repo”。那么什么是回购?为什么他们使用 repo 而不仅仅是使用 GIT?,是否有一个用于 repo 的 GUI,使我能够暂停/恢复同步,因为每次我偶尔断开连接时,repo 似乎从头开始同步!
【问题讨论】:
当我想获取 Android 源代码时,我知道我必须使用“repo”。那么什么是回购?为什么他们使用 repo 而不仅仅是使用 GIT?,是否有一个用于 repo 的 GUI,使我能够暂停/恢复同步,因为每次我偶尔断开连接时,repo 似乎从头开始同步!
【问题讨论】:
正如 android 网页中提到的,repo 不会取代 git。它只是git 之上的一个工具,可以帮助您管理多个 git 存储库。
例如,假设我有一个包含很多功能的大型项目,并且我有几个团队在处理每个功能,并且我为每个功能创建了一个存储库。例如,假设我的存储库是wifi、telephony、power management 等。当您的功能具有不同的生命周期时,此操作是有意义的。例如,如果我不会在下一个版本中触及 wifi 功能,但我会修改所有其余部分。所以在这种情况下,我的项目或产品分布在几个不同的 git 存储库中。
因此,为了获得我项目的集中照片(我项目的一个特定时刻,例如里程碑),我需要获取每个存储库的修订版(git 哈希或标签)。请记住,我们为每个功能都有一个存储库。手动我可以做到,但可能会非常痛苦。因此,使用 repo,您可以拥有一个 MANIFEST,它链接到每个 git repo 的所有修订版(每个功能一个),并拥有我整个项目的具体图片。
简单地说,我可以说这是一种管理分散的集中式多个 git 存储库的方法。
使用 repo,您可以拥有更多功能,而不仅仅是在特定时间结帐。欲了解更多信息,请访问http://source.android.com/source/using-repo.html。
【讨论】:
Repo 和 git - 它们是什么,它们的用途 - 在 source.android.com 上进行了解释
要使用 Android 代码,您 将需要同时使用 Git 和 Repo。
Git 是一个开源版本控制系统,旨在 处理非常大的项目 分布在多个 存储库。在上下文中 Android,我们本地使用 Git 诸如本地分支的操作, 提交、差异和编辑。
Repo 是我们在 Git 之上构建的工具。回购帮助我们管理 许多 Git 存储库, 上传到我们的修订控制 系统,并自动化部分 Android 开发工作流程。回购是 不是为了取代 Git,只是为了让 使用 Git 更容易 Android 的上下文。回购命令 是一个可执行的 Python 脚本 你可以把任何地方放在你的路径中。
据我所知,Repo 没有 GUI,但上面的网站上有相当多的指导,用于从命令行控制 Repo 正在做什么。
【讨论】:
repo 给已经非常复杂的git 增加了一定程度的复杂性。此外,repo 中没有实现许多基本命令(如log 或rebase),如果您想正常工作,则必须在repo 上方编写自己的脚本(与本地更改同步很复杂) git,repo 这是二战)。另一个例子:repo 会将下面的 git 置于分离状态,这会使它们更难管理。
关于暂停和重启点,在终端窗口中进行回购同步时,您可以点击“ctrl + z”来暂停回购同步。要重新启动,只需在同一窗口中键入“fg”即可。
【讨论】:
转到:
http://source.android.com/source/git-repo.html
您可以下载repo 脚本。它是一个Python脚本,使用git命令进行分布式源代码修改。
执行repo sync 后,执行ps -auwf 以查看进程:
我看到的:
\_ python -E /sde3/root/download/android/android/.repo/repo/main.py --rep \_ git fetch korg \_ git fetch korg \_ git index-pack --stdin -v --fix-thin --keep=fetch-pack 5227 on
是的,repo sync 经常中断。但它很强大,只需重新启动命令,它就会再次恢复同步 - 那些已经更新的将不会被重新应用,所以它会跳过它们并继续其余的。
【讨论】:
repo sync 有各种有用的选项:
-f 从断开连接中恢复
-c 只是上传你要求的分支
-j 通过增加命令使用的 cpu 数量来加速同步
【讨论】: