Как работает репозиторий Android репо? - PullRequest
44 голосов
/ 27 мая 2011

Источник Android - это большая иерархия репозиториев git . Они управляются с помощью специального сценария repo . Repo определяет, какими репозиториями git управлять с помощью manifest.xml. manifest.xml Android размещается в репозитории git вместе со всеми остальными репозиториями git.

Как этот репозиторий управляется в Android? В частности, как организованы различные ветви и файлы, размещенные в каждой ветви?

Ответы [ 2 ]

62 голосов
/ 08 августа 2012

Во-первых, init repo создает каталог .repo, клонирует репозиторий git https://android.googlesource.com/tools/repo в .repo/repo и репозиторий git, указанный с параметром -u, в пустой репозиторий на .repo/manifests.git.После этого он создает каталог .repo/manifests, преобразует его в репозиторий git, создавая символические ссылки от .repo/manifests/.git до .repo/manifests.git.Затем он проверяет ветку, указанную в -b, и создает символическую ссылку .repo/manifest.xml, указывающую на указанный файл (опция -m) в .repo/manifests, по умолчанию .repo/manifests/default.xml.

Примерно так:

  repo init -u $URL -b $BRANCH -m $MANIFEST
  --------------------
  mkdir .repo; cd .repo
  git clone https://android.googlesource.com/tools/repo
  git clone --bare $URL manifests.git
  mkdir -p manifests/.git; cd manifests/.git
  for i in ../../manifests.git/*; do ln -s $ı .; done
  cd ..
  git checkout $BRANCH -- .
  cd ..
  ln -s manifests/$MANIFEST manifest.xml  

Вы можете проследить, что действительно происходит с repo --trace init ...

Затем репозитории репозиториев синхронизации репозиториев с .repo/projects для каждого проекта вmanifest.xml и local_manifest.xml, создает рабочие каталоги с .git, имеющие символические ссылки на соответствующий пустой репозиторий, проверяет ветку, указанную в манифесте, и обновляет .repo/project.list.Случай, когда проекты уже есть, немного отличается, по сути, выполняя git pull --rebase.

8 голосов
/ 11 мая 2012

В корне репо находится скрытый каталог с именем «.repo», внутри которого вы найдете git-проект с именем «manifest», который обычно содержит файл с именем «default.xml». Этот файл содержит информацию обо всех проектах и ​​о том, где находятся связанные с ними репозитории git. Этот файл также является версионным, поэтому при использовании команды «repo init -b XYZ» он будет возвращен, и вы сможете вернуться к более старым веткам, которые могли добавлять / удалять git-проекты по сравнению с заголовком.

Вот ссылка на документ repo git repo, описывающий формат манифеста:

https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt

...