什么是Repo,为什么Google使用它?

49

当我想要获取Android源代码时,我知道我必须使用“repo”。那么什么是repo?为什么他们使用repo而不只是使用GIT?是否有一个GUI可以使我暂停/恢复同步,因为每次我偶尔断开连接时,似乎repo都会从头开始同步!

当我想要获得Android源代码时,我了解到需要使用“repo”。那么,什么是repo呢?为什么他们使用repo而不是直接使用GIT呢?此外,是否有一个GUI界面可以让我暂停/恢复同步,因为每次我断开连接后,似乎repo都会重新开始同步!

5个回答

32
正如安卓网页中所提到的那样,repo并没有取代git。它只是在git上的一个工具,并帮助你管理多个git仓库。
例如,假设我有一个大型项目,其中有很多功能,我有几个团队分别负责每个功能,并为每个功能创建了一个仓库。例如,假设我的仓库是wifitelephonypower management等。当您的功能具有不同的生命周期时,这种操作是有意义的。例如,如果我在下一个版本中不会触及wifi功能,但我将修改所有其他功能。因此,在这种情况下,我的项目或产品分布在几个不同的git仓库中。
因此,要获得我的项目的集中照片(例如里程碑的某个特定时刻),我需要获取每个仓库的修订版(git哈希或标签)。请记住,我们为每个功能都有一个仓库。手动操作可能很麻烦。因此,使用repo,您可以拥有一个MANIFEST,它链接到每个git仓库的所有修订版(每个功能一个),并具有关于整个项目的特定图片。
简单来说,我可以说这是一种管理集中的多个git仓库(这些仓库是分散的)的方法。
使用repo,您有更多功能,不仅可以在特定点检出。有关更多信息,请访问http://source.android.com/source/using-repo.html

27

"Repo"和"Git"是什么,它们的用途在source.android.com上有解释。

要使用Android代码,您需要同时使用Git和Repo。

Git是一个开源的版本控制系统,专门用于处理分布在多个存储库中的非常大的项目。在Android的上下文中,我们使用Git进行本地操作,如本地分支、提交、差异和编辑。

Repo是我们基于Git构建的工具。Repo帮助我们管理许多Git存储库,将其上传到我们的修订控制系统,并自动化Android开发工作流程的某些部分。 Repo并不意味着要取代Git,而只是使在Android上下文中使用Git更容易。 repo命令是一个可执行的Python脚本,您可以将其放置在任何路径中。

据我所知,Repo没有GUI界面,但网站上有很多指导信息,可以通过命令行控制Repo的操作。


2
http://source.android.com/source/developing.html :此文章发布日期的正确网址。 - RichieHH
@eibrahim,你能详细说明一下吗?(我对使用Repo进行自己的项目很感兴趣,想听听反馈...) - Zvika
3
我对此不是专家。我加入了一个正在使用它的项目。学习曲线很陡峭,事物的连通方式非常反直觉,而且似乎过度设计了。也许是我们使用方法的问题,但我真的不喜欢它,其他开发人员似乎也有相同的看法。如果您有多个代码库,我建议只使用纯粹的Git,或者使用子模块。抱歉我没有给出太具体的信息,但就像我说的,我不是专家,只是一个心怀不满的用户/开发人员。 - Emad
3
我确认Eibrahim的观点。 repo 给已经非常复杂的 git 添加了更多复杂性。此外,许多基本命令在 repo 中没有实现(例如 logrebase),如果您想要正常工作,您将不得不在 repo 上编写自己的脚本(使用 git 进行带有本地更改的同步非常复杂,但是用 repo 却异常简单)。另一个例子:repo 将会使git处于分离状态,这会使它们更难以管理。 - calandoa

3

关于暂停和重新开始点,在终端窗口进行repo同步时,您可以按下“ctrl + z”来暂停repo同步。要重新开始,请在同一窗口中输入“fg”。


2

前往:

http://source.android.com/source/git-repo.html

你可以下载 repo 脚本。它是一个使用 git 命令进行分布式源代码版本控制的 Python 脚本。

执行 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 经常会出现问题。但它很强大,只需重新启动命令,它就会继续同步 - 已更新的部分不会再次应用,因此它将跳过它们并继续进行。


它是用Python编写的,而不是bash。你的“ps”也显示了这一点。 - claus

1

repo sync有各种有用的选项:

-f 可以从断开连接中恢复

-c 只上传你要求的分支

-j <#CPUS> 通过增加命令使用的CPU数量来加快同步速度


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接