Подтвердить что ты не робот

Клонирование источников Android на локальном сервере репозитория

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

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

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

4b9b3361

Ответ 1

На сервере git

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

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

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

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

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

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

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

git checkout -b branch_a origin/branch_a

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

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

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

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