Какова цель репозиториев git в .repo / projects /, созданных скриптом репо Android? - PullRequest
5 голосов
/ 27 мая 2011

Источник Android управляется repo . При синхронизации с использованием репозитория создается каталог с именем .repo/projects/, который содержит все репозитории git, также извлеченные непосредственно в текущем рабочем каталоге, просто в формате git.

Для каких целей репо поддерживает голые репозитории git? И как эти репозитории используются репо?

(Примечание: пояснение: я не говорю о git-репозитории, когда пишу «repo», я говорю конкретно о скрипте под названием repo, созданном / для Android для поддержки все репозитории git, содержащие исходники Android.)

Ответы [ 3 ]

5 голосов
/ 30 августа 2011

Поработав некоторое время с системой манифеста репо Android, я думаю, что теперь понимаю назначение «пустых» репозиториев в каталоге .repo/projects/.

Как уже ответил @Fredrik, проектов нетеще одна копия репозитория, представленная непосредственно в «клоне», созданном repo.На самом деле содержимое всех каталогов .git в клоне - это просто символические ссылки, например:

$ ll development/.git/
total 452
drwxr-xr-x  2 bfh bfh   4096 2011-08-15 13:55 ./
drwxr-xr-x 20 bfh bfh   4096 2011-08-15 13:55 ../
lrwxrwxrwx  1 bfh bfh     43 2011-08-15 13:55 config -> ../../.repo/projects/development.git/config
lrwxrwxrwx  1 bfh bfh     48 2011-08-15 13:55 description -> ../../.repo/projects/development.git/description
-rw-r--r--  1 bfh bfh     41 2011-08-15 13:55 HEAD
lrwxrwxrwx  1 bfh bfh     42 2011-08-15 13:55 hooks -> ../../.repo/projects/development.git/hooks/
-rw-r--r--  1 bfh bfh 449008 2011-08-15 13:55 index
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 info -> ../../.repo/projects/development.git/info/
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 logs -> ../../.repo/projects/development.git/logs/
lrwxrwxrwx  1 bfh bfh     44 2011-08-15 13:55 objects -> ../../.repo/projects/development.git/objects/
lrwxrwxrwx  1 bfh bfh     48 2011-08-15 13:55 packed-refs -> ../../.repo/projects/development.git/packed-refs
lrwxrwxrwx  1 bfh bfh     41 2011-08-15 13:55 refs -> ../../.repo/projects/development.git/refs/
lrwxrwxrwx  1 bfh bfh     45 2011-08-15 13:55 rr-cache -> ../../.repo/projects/development.git/rr-cache/
lrwxrwxrwx  1 bfh bfh     40 2011-08-15 13:55 svn -> ../../.repo/projects/development.git/svn

Таким образом, действительные репозитории git представлены только один раз в клоне.

причина для того, чтобы держать голый и нормальный мерзавец, кроется в том, как работает система манифеста.Система манифеста - это способ указать набор мерзавцев, которые будут проверены, и в какой версии они будут проверены.Файл манифеста сам поддерживается в git, а команда repo позволяет по желанию изменять ветку этого манифеста git.

Таким образом, можно (быстрый) способ удаления и добавления gits в зависимости от текущего состояния.выбранный в файле манифеста, репозиторий может просто сохранить все файлы, которые вы когда-либо клонировали, в папке .repo/projects, а затем скопировать их только в «обычную» область клонирования, если они выбраны в текущей ветви файла манифеста.

4 голосов
/ 27 мая 2011

Это не две копии, папка .git в компоненте содержит символические ссылки на соответствующий компонент в ./repo/projects

0 голосов
/ 27 мая 2011

Отказ от ответственности: я далеко не эксперт в Git.

Я думаю, вы говорите, что когда вы проверяете код, вы получаете две копии. Один из них - рабочая копия (там, где вы указали ее копию), а другой хранится в .repo / projects. Предполагая, что я правильно истолковал вопрос, лучше всего предположить, что копия в .repo / projects сохраняется, чтобы вы могли быстро выполнить сравнения и вернуться к базовой ревизии, которую вы извлекли, без необходимости возвращаться на сервер. Я думаю, что для VCS довольно распространено сделать это. SVN делает это, помещая папку .svn во все папки вашей рабочей копии и помещая в них базовые файлы ревизий.

...