Лучший способ эффективно изменить версии репозитория Android после загрузки с помощью repo/git

У меня возникла ситуация, когда мне нужно собрать набор статических копий исходного кода Android разных версий.

Простое выполнение repo init -b $version; repo sync займет вечность (init требует взаимодействия, а синхронизация будет расточительна для моей пропускной способности в разных версиях).

Моя текущая настройка — загрузить одну базовую версию (скажем, 1.6_r1), скопировать ее в новую папку (android-1.6_r2), а затем повторно запустить init и синхронизировать (repo init -b android-1.6_r2; repo sync). Однако иногда синхронизация завершается с ошибкой, например:

ndk/build/platforms/android-3/arch-arm/usr/incl
Прерывание
Синхронизация рабочего дерева: 100% (153/153), выполнено.

ошибка: разработка/: проверка платформы/разработки caf83cb2b0ffde1a4cfb7cb258cbe012e283d9e1 Синхронизация репо вернула FAIL на android-2.1_r2.1s

Я нашел несколько сообщений с похожими ошибками, которые указывают, что это может быть вызвано тем, что репо не синхронизировано с «измененными» файлами в файловой системе, но мне интересно, вызваны ли мои ошибки изменением версий под носом репо.

Это правильный способ изменить версии репозитория? В более общем плане, существует ли эффективный с точки зрения времени и пропускной способности способ превратить репозиторий android-1.6_r1 в репозиторий android-1.6_r2?


person bhoward    schedule 15.11.2011    source источник


Ответы (2)


(ОБНОВЛЕНИЕ: мой первоначальный ответ подразумевает, что мы можем постепенно инициировать новое репо из предыдущего, например, с 1.6_r1 до 1.6_r2, но правильная настройка должна была иметь одно локальное «главное зеркало» репо где мы можем указать ссылку при запуске новой инициализации. Я изменил текст ниже, чтобы избежать неправильного значения.)

Вместо копирования попробуйте добавить --reference=/path/to/main/repo к вашей команде repo init в новом каталоге.

Например, если у вас уже есть репозиторий в каталоге /repos/aosp-main, загруженный ранее (и синхронизированный с googlesource.com), вы можете сделать следующее:

$ mkdir /repos/aosp-1.6_r1
$ cd /repos/aosp-1.6_r1
$ repo init -b android-1.6_r1 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main
$ repo sync

И затем, если вы хотите другую версию:

$ mkdir /repos/aosp-1.6_r2
$ cd /repos/aosp-1.6_r2
$ repo init -b android-1.6_r2 -u https://android.googlesource.com/platform/manifest --reference=/repos/aosp-main
$ repo sync

Таким образом, нам нужно синхронизироваться с адресом googlesource.com только тогда, когда есть новый материал, который мы еще не загрузили, и он должен просто использовать уже синхронизированный основной репозиторий для локальной инициализации дополнительных репозиториев.

person Joe    schedule 16.11.2011
comment
Я запускаю репозиторий init -b android-1.6_r1 -u android.googlesource.com/platform/manifest --reference=/repos/aosp-main. репо говорит, что репо было инициализировано в /repos/aosp-main... - person user3875388; 29.12.2018

Вы обязательно обновили скрипт репо, чтобы быть уверенным?

$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
person LuxuryMode    schedule 16.11.2011
comment
Да, все мои настройки обновлены за последние 24 часа. - person bhoward; 17.11.2011