Когда я хотел получить исходный код Android, я знал, что должен использовать «репозиторий». Так что же такое репо? Почему они используют репо, а не просто используют GIT? И есть ли графический интерфейс для репо, который позволяет мне приостанавливать/возобновлять синхронизацию, потому что каждый раз, когда я время от времени отключаюсь, кажется, что репо начинает синхронизироваться с самого начала!
Что такое Repo и почему Google его использует?
Ответы (5)
Репо и git — что это такое и для чего они нужны — объясняется на source.android.com.
Для работы с кодом Android вам нужно будет использовать как Git, так и Repo.
Git — это система контроля версий с открытым исходным кодом, предназначенная для работы с очень большими проектами, распределенными по нескольким репозиториям. В контексте Android мы используем Git для локальных операций, таких как локальное ветвление, коммиты, сравнения и изменения.
Repo — это инструмент, который мы создали поверх Git. Repo помогает нам управлять многими репозиториями Git, выполняет загрузку в нашу систему контроля версий и автоматизирует части рабочего процесса разработки Android. Репозиторий не предназначен для замены Git, а только для того, чтобы упростить работу с Git в контексте Android. Команда repo — это исполняемый скрипт Python, который вы можете разместить в любом месте вашего пути.
Насколько я могу судить, для Repo нет графического интерфейса, но на указанном выше сайте есть довольно много руководств по управлению тем, что делает Repo из командной строки.
repo
добавляет уровень сложности к git
, который и без того очень сложен. Более того, многие базовые команды не реализованы в repo
(типа log
или rebase
) и вам придется писать свои скрипты выше repo
, если вы хотите нормально работать (с git
делать синхронизацию с локальными изменениями сложно, с repo
это ВОВ ). Другой пример: repo
переведет мерзавцев в отсоединенное состояние, что затруднит управление ими.
- person calandoa; 01.06.2016
Как упоминается на веб-странице Android, repo
не заменяет git
. Это просто инструмент над git
, который помогает вам управлять несколькими репозиториями git.
Например, предположим, что у меня есть большой проект с множеством функций, над каждой функцией работает несколько команд, и я создал по одному репозиторию для каждой функции. Например, предположим, что мои репозитории wifi
, telephony
, power management
и т. д. Это действие имеет смысл, когда у ваших функций разные жизненные циклы. Например, если я не буду касаться функции wifi
в моем следующем выпуске, но я изменю все остальное. Таким образом, в этом сценарии мой проект или продукт распространяется в нескольких разных репозиториях git.
Итак, чтобы получить централизованное фото моего проекта (один конкретный момент моего проекта, например веха), мне нужно получить ревизию (хэш или тег git) каждого репозитория. Помните, что у нас есть один репозиторий для каждой функции. Вручную я мог бы сделать это, но это может быть очень болезненно. Таким образом, с репозиторием у вас может быть один MANIFEST
, который ссылается на все версии каждого репозитория git (по одному для каждой функции) и имеет конкретную картину всего моего проекта.
Проще говоря, я мог бы сказать, что это способ управления несколькими централизованными репозиториями git, которые децентрализованы.
С репо у вас есть больше возможностей, не только для оформления заказа в определенной точке. Дополнительные сведения см. на странице http://source.android.com/source/using-repo. HTMLа>.
Что касается точки паузы и перезапуска, в окне терминала, выполняющем синхронизацию репо, вы можете нажать «ctrl + z», чтобы приостановить синхронизацию репо. Для перезапуска просто введите «fg» в том же окне.
Go to:
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
часто ломается. Но это надежно, просто перезапустите команду, и она снова возобновит синхронизацию — те, которые были обновлены, не будут повторно применены, поэтому она пропустит их и продолжит с остальными.
Синхронизация репо имеет различные полезные опции:
-f восстанавливается после отключений
-c просто загружает ветку, которую вы просили
-j ‹#CPUS> ускоряет синхронизацию, увеличивая количество процессоров, используемых командой.