Клонирование исходников Android на локальный сервер репозитория

Я хочу разрабатывать поверх Android, используя локальный сервер хранилища Android. Мне нужно добавить несколько новых репозиториев git в иерархию git, и мне нужно изменить существующие исходники Android для индивидуальной настройки Android.

Каков "правильный" способ клонирования всего дерева исходников Android из git-репозиториев, чтобы я мог извлекать / извлекать данные из общего локального сервера репозитория и извлекать его, а также легко извлекать новые изменения из исходной версии Android?

Я специально ищу совет о том, как использовать repo скрипт для взаимодействия с моим собственным сервером, и как настроить manifest Git-репозиторий и управляющие филиалы в нем.

1 ответ

Решение

На вашем сервере Git

  1. репозиторий init -u https://android.googlesource.com/platform/manifest --mirror # - ключ является ключом
  2. синхронизация репо

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

На вашем клиенте:

  1. repo init -u git@git.yourserver.com: platform / manifest.git # вы можете использовать другие способы доступа к вашему git-серверу; Я должен предположить что-то для этого примера.

  2. пока нет синхронизации репо. Ваш манифест, вероятно, неверен. Посмотрите на символическую ссылку.repo/manifest.xml... cat it и прочитайте сверху <remote fetch=""... это, вероятно, указывает на android.googlesource.com. но если он говорит "..", я думаю, что это означает "вернуться на мой сервер", так что вы можете перейти к шагу 6). Но если он указывает на другой сервер (не ваш), перейдите к шагу 3.

  3. кд.репо / манифесты
  4. vim .repo/manifest /default.xml (или каким бы ни был ваш активный manifest.xml).
  5. Исправить файл default.xml <remote fetch="CHANGE ME" указать на ваш сервер мерзавца
  6. попробуйте синхронизацию репо. Это должно тянуть только из вашего хранилища. Если этого не произойдет, остановите синхронизацию репозитория и попробуйте снова исправить файл default.xml.
  7. Когда вы увидите, что на вашем тестовом компьютере работает синхронизация репозитория, верните файл default.xml обратно в (git commit; git push), так что другие члены команды будут иметь опыт "без манифеста-редактирования", когда они repo init; repo sync с вашего сервера.

Как только вы видите "редактирование без манифеста" repo init; repo sync поработайте, затем снова зайдите в ваш default.xml и просто начните добавлять новые элементы XML вместе с тоннами других существующих элементов проекта Android; эти новые элементы будут указывать на ваши собственные проекты. Для этих новых проектов просто выполните команду git init, как обычно, и убедитесь, что ветка совпадает с <default revision="whatever_branch_you_see_here" так что repo sync будет успешным, когда он сталкивается с этими новыми проектами.

Если вы действительно установите ветку по умолчанию в своем манифесте <default revision="" элемент, затем просто сделайте так, чтобы все сделали локальную ветвь, установленную для следования удаленной ветке, указанной в атрибуте ревизии Так, например, если <default revision="branch_a" в вашем манифесте, после того, как вы выполните синхронизацию репо, когда вы перейдете в интересующий вас подпроект, выполните:

git checkout -b branch_a origin/branch_a

Тогда, если пользователь git push's (насколько я знаю, нет команды репо, чтобы нажать), и если кто-то еще делает ./repo sync после этого нажатия они получат эти изменения от исходного пользователя... при условии, что вы используете тот же манифест и фактически отправляете его в ревизию по умолчанию (ветвь), указанную в этом манифесте.

Это самый простой рецепт. Если вы хотите создавать фактические ветки объектов, вам нужно будет редактировать манифест более регулярно, если вы хотите, чтобы 'repo sync' просто работал... и вам нужно будет связаться с остальной командой, чтобы получить вашу версию манифест, когда вы делаете это. В качестве альтернативы, если вы касаетесь только одного или двух репозиториев git, то вы можете просто отказаться от синхронизации репо и git push/pull, как обычно, в этих репозиториях и игнорировать остальную часть тихого дерева в те моменты, когда вы интенсивно выполняете итерации. Это звучит, в конечном счете, для меня, как более простой путь. Я бы проигнорировал репо как можно больше; использовать его только для синхронизации "всех проектов" и оставлять его в покое на время, когда вы сосредотачиваетесь на 1 или 2 проектах.

Что касается получения обновлений от апстрима. Я думаю, что способ сделать это состоит в том, чтобы изменить ваш default.xml так, чтобы он указывал на исходное местоположение git (например, android.googlesource.com), выполнить синхронизацию репозитория, чтобы все новые вещи слились, и однажды сделать это с помощью синхронизировать, зафиксировать обратно в репо. Я еще не сделал этого; поэтому я не могу быть слишком конкретным, но именно так я планирую это сделать.

Я игнорирую детали администрирования сервера выше. Например, вам нужно вызвать repo init в определенном каталоге на вашем git-сервере, чтобы сделать его доступным git-репозиторием; Я предполагаю, что вы знаете, как администрировать ваш git-сервер.

Другие вопросы по тегам