Что такое репо и почему Google использует его?

Когда я хотел получить исходный код Android, я знал, что мне нужно использовать "репо". Итак, что такое репо? Почему они используют репо, а не просто используют GIT?, и есть ли графический интерфейс для репо, что позволяет мне приостанавливать/возобновлять синхронизацию, потому что каждый раз, когда я иногда отключается, кажется, что репо начинает синхронизацию с самого начала!

Ответ 1

Репо и git - то, чем они являются, для чего они предназначены - объясняются на source.android.com

Чтобы работать с кодом Android, вы необходимо будет использовать как git, так и Repo.

Git - это система управления версиями с открытым исходным кодом, предназначенная для обрабатывать очень большие проекты, которые распределены по нескольким Хранилища. В контексте Android, мы используем git для локального такие как локальное ветвление, фиксирует, изменяет и редактирует.

Репо - это инструмент, который мы построили поверх Git. Репо помогает нам управлять много репозиториев git, делает загружается в наш контроль версий системы и автоматизирует части Рабочий процесс разработки Android. Репо не предназначен для замены Git, только чтобы сделать легче работать с git в контекст Android. Команда repo является исполняемым Python script, который вы можете поместить все в свой путь.

Нет никакого GUI для Repo, насколько я могу судить, но на сайте выше достаточно немного указаний для управления тем, что Repo делает из командной строки.

Ответ 2

Как упоминается на веб-странице Android, repo не заменяет git. Это всего лишь инструмент над git и помогает вам управлять несколькими хранилищами git.

Например, предположим, что у меня есть большой проект с множеством функций, и у меня есть несколько команд, работающих над каждой функцией, и я создал один репозиторий для каждой функции. Например, предположим, что мои репозитории wifi, telephony, power management и т.д. Это действие имеет смысл, когда ваши функции имеют разные жизненные циклы. Например, если я не коснусь функции wifi в моей следующей версии, но я изменю все остальное. Поэтому в этом сценарии мой проект или продукт распространяется в нескольких разных хранилищах git.

Итак, чтобы получить централизованное фото моего проекта (один конкретный момент моего проекта, например, веху), мне нужно получить ревизию (git хэш или тег) каждого репозитория. Помните, что у нас есть один репозиторий для каждой функции. Вручную я мог бы это сделать, но мог бы быть очень болезненным. Таким образом, с репо вы можете иметь один MANIFEST, который связывается со всеми ревизиями каждого репозитория git (по одному для каждой функции) и имеет конкретную картину всего моего проекта.

Просто я могу сказать, что это способ управления централизованными несколькими репозиториями git, которые децентрализованы.

С репо у вас есть больше возможностей, а не только для проверки в определенной точке. Для получения дополнительной информации перейдите в http://source.android.com/source/using-repo.html.

Ответ 3

Относительно точки паузы и перезапуска, в то время как в окне терминала, выполняющем синхронизацию репо, вы можете нажать "ctrl + z", чтобы приостановить синхронизацию репо. Для перезапуска просто введите "fg" в одно и то же окно.

Ответ 4

Перейдите к:

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

и вы можете загрузить repo script. Это Python script, который использует команду 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 часто ломается. Но он надежный, просто перезапустите команду, и он снова возобновит синхронизацию - те, которые были обновлены, не будут повторно применены, поэтому они пропустят их и продолжат с остальными.

Ответ 5

Репо sync имеет различные полезные опции:

-f восстанавливается из разъединений

-c просто загружает ветку, которую вы просили

-j < #CPUS > ускоряет синхронизацию, увеличивая количество процессоров, используемых командой