Клонирование исходников Android на локальный сервер репозитория
Я хочу разрабатывать поверх Android, используя локальный сервер хранилища Android. Мне нужно добавить несколько новых репозиториев git в иерархию git, и мне нужно изменить существующие исходники Android для индивидуальной настройки Android.
Каков "правильный" способ клонирования всего дерева исходников Android из git-репозиториев, чтобы я мог извлекать / извлекать данные из общего локального сервера репозитория и извлекать его, а также легко извлекать новые изменения из исходной версии Android?
Я специально ищу совет о том, как использовать repo
скрипт для взаимодействия с моим собственным сервером, и как настроить manifest
Git-репозиторий и управляющие филиалы в нем.
1 ответ
На вашем сервере Git
- репозиторий init -u https://android.googlesource.com/platform/manifest --mirror # - ключ является ключом
- синхронизация репо
Поскольку вы указали --mirror, все созданные репозитории будут "голыми" репозиториями, что является правильным способом создания зеркала, если вы не являетесь git uberlord.
На вашем клиенте:
repo init -u git@git.yourserver.com: platform / manifest.git # вы можете использовать другие способы доступа к вашему git-серверу; Я должен предположить что-то для этого примера.
пока нет синхронизации репо. Ваш манифест, вероятно, неверен. Посмотрите на символическую ссылку.repo/manifest.xml... cat it и прочитайте сверху
<remote fetch=""
... это, вероятно, указывает на android.googlesource.com. но если он говорит "..", я думаю, что это означает "вернуться на мой сервер", так что вы можете перейти к шагу 6). Но если он указывает на другой сервер (не ваш), перейдите к шагу 3.- кд.репо / манифесты
- vim .repo/manifest /default.xml (или каким бы ни был ваш активный manifest.xml).
- Исправить файл default.xml
<remote fetch="CHANGE ME"
указать на ваш сервер мерзавца - попробуйте синхронизацию репо. Это должно тянуть только из вашего хранилища. Если этого не произойдет, остановите синхронизацию репозитория и попробуйте снова исправить файл default.xml.
- Когда вы увидите, что на вашем тестовом компьютере работает синхронизация репозитория, верните файл 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-сервер.