Интеграция изменений Android производителя в aosp

Я пытаюсь интегрировать изменения устройства AOSP в стандартное локальное зеркало AOSP. Это немного сбивает с толку, но я постараюсь быть максимально ясным.

  1. Я создал локальное зеркало репозитория AOSP на сервере (другой локальный компьютер)

  2. Патчи производителя основаны на теге "android-4.3_r2.1". Поэтому я инициализировал локальное хранилище и изменил файл манифеста.

репозиторий init -u ssh:// локальный сервер /git/aosp/ зеркало / платформа / манифест -b android-4.3_r2.1

Изменен.repo/manifest.xml следующим образом:

  <remote  name="aosp"
           fetch="ssh://localserver/git/aosp/mirror" />  
  <default revision="refs/tags/android-4.3_r2.1"
           remote="aosp"
           sync-j="8" />
  1. "Синхронизация репо" завершена успешно. Применяется патч, предоставленный продавцом. Это создало ветку "vendor" для каждого git-проекта, модифицированного и / или добавленного патчем.

  2. Сейчас у меня есть репозиторий на основе тега "android-4.3_r2.1", в некоторых проектах есть ветка "vendor". Ни у одного из проектов нет "мастерской" ветки!

Как собрать все это вместе, чтобы создать работоспособное хранилище? Я до сих пор учусь. Было бы это правильно?

repo checkout refs/tags/android-4.3_r2.1
repo forall -c git checkout -b master
repo forall -c git merge vendor
  1. Последняя проблема заключается в использовании репо для отправки изменений в наше локальное зеркало. Похоже, что выгрузка репо работает, только если вы используете сервер Gerrit. Это действительно необходимо?

ТИА

1 ответ

Нет необходимости изменять манифест так, чтобы он указывал на ваш Git-сервер. .. URL-адрес в манифесте android-4.3_r2.1 означает, что URL-адреса git будут относительны URL-адреса манифеста. Другими словами, если вы клонируете манифест с вашего локального зеркала, остальные мерзавцы также будут извлечены из вашего локального зеркала.

Когда вы говорите о вендорах и основных ветвях, я предполагаю, что вы говорите о локальных ветвях (то есть видно в git branch выход). В этом ответе я собираюсь игнорировать их и говорить только о ветках на пульте. Это те, которые имеют значение. С Repo вы не получаете никаких локальных веток по умолчанию, а название любых локальных ветвей зависит от каждого человека.

Я почти уверен, что у каждого из ваших проектов есть главная ветка - на пульте "aosp". Я предлагаю вам выбрать другое название ветки для ваших адаптаций и патчей, которые вы получите от своего поставщика. На самом деле, разумно выбрать другое пространство имен. Если ваша компания или организация называется Acme, вы можете поместить все свои филиалы в acme/, например acme/master, acme/vendor и т. Д. (Я предпочитаю делать это наоборот, то есть вставлять восходящие ветки в отдельные пространства имен, такие как aosp/ и caf/. Таким образом, ветки, над которыми вы действительно работаете, не имеют префикса, и вы можете иметь несколько восходящих потоков.)

Включение всего этого в рабочий репозиторий потребует обновления манифеста, чтобы он указывал на ветви, над которыми вы работаете. Если вы подтолкнете свою локальную ветвь поставщика к acme / vendor, то манифест должен указывать на acme / vendor. Вам решать, создавать ли ветку acme / vendor в каждом отдельном git и изменять ревизию по умолчанию в манифесте, или вы хотите перемещать ветку только там, где она действительно должна существовать, и выборочно переопределять ревизию для этих git.

Последнее, очевидно, требует от вас обновления манифеста каждый раз, когда вы запускаете git. С другой стороны, вы не будете засорять все мерзавцы ненужными ветвями, и вы можете быстро просмотреть файл манифеста и посмотреть, какие мерзавцы являются ветвями, а какие идут прямо из апстрима. Кроме того, получение нового релиза из апстрима, вероятно, потребует дополнительной работы, если вы разветвите все gits. Имейте в виду, что восходящий поток может переключиться на другую ветвь для git, чтобы вы могли получать обновления не-fast forward даже для git, которые вы не трогали. В приведенном ниже примере показано, как не удается обновить acme / master с 1.2.3 до 1.2.4 в качестве ускоренной перемотки вперед, поэтому вам придется либо выполнить обновление без перемотки вперед (как правило, не рекомендуется), объединить с 1.2. 3 в acme/master (возможно, это приведет к конфликтам и навсегда сделает невозможным быстрое обновление), или создайте новую ветку на основе 1.2.4.

         -----1.2.3 (acme/master)     -----1.2.4
        /                            /
 ------------------------------------

Не забудьте ветвить манифест. Repo обрабатывает манифест git особым образом, где предполагается, что все изменения сделаны в ветви с именем "default". Итак, просто отредактируйте файл манифеста, зафиксируйте ваши изменения и нажмите его, например: git push origin HEAD:refs/heads/acme/master, После этого вы можете инициализировать новое рабочее пространство с помощью repo init -u ... -b acme/master,

Да, repo upload предназначен для использования с Gerrit, который вам, разумеется, не нужен (хотя я рекомендую его для функций проверки кода). Вы можете просто нажать на Git, как обычно. Я вижу, вы уже нашли repo forall команда, которая весьма полезна.

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