Как переключить версию Android в локальное репо?

Я загрузил все дерево работы с помощью следующей команды:

repo init -u https://android.googlesource.com/platform/manifest
repo sync -j8

После успешной синхронизации я хочу переключить рабочее дерево на android 2.3.7. Вы видите, что я не указывал ветку с параметром "-b", когда "repo init". Поэтому я думаю, что вся информация тега должна быть загружена, и я могу легко переключиться на Android 2.3.7 с помощью следующей команды:

repo forall -c git checkout android-2.3.7_r1

Но он вызывает много ошибок, таких как:

error: pathspec 'android-2.3.7_r1' did not match any file(s) known to git.

Итак, как я могу переключиться на Android 2.3.7 без повторной синхронизации init -b android-2.3.7_r1 и "repo sync"?

Ответы

Ответ 1

Вы не можете решить эту проблему, используя repo forall.

Предположим для уверенности, что ваше текущее дерево Android чистое - никаких локальных изменений или фиксаций, т.е. repo status ничего не показывает.

Чтобы правильно переключить версию Android, все, что вам нужно изменить, это ветка для вашего хранилища манифестов. Сначала определите доступные ветки с манифестами для разных версий Android:

cd $ANDROID_ROOT
cd .repo/manifests
git branch -av   # see all available branches on origin

Выберите версию и

cd $ANDROID_ROOT
repo init -b <my_selected_android_version>

Такой выборочный repo init с -b (без -u) только обновит ветвь манифеста и не затронет ваше дерево.

Теперь просто синхронизируйте его:

repo sync -j8

и через некоторое время ваше дерево Android переключится на другую версию.

Скорость этой операции в основном определяется тем, насколько файл манифеста default.xml отличается между старой и новой версиями Android - потому что если в новый манифест был добавлен какой-то репозиторий git, он потратит время на его клонирование. И если какой-то репозиторий был удален, если он действительно будет удален.

Но, по большому счету, этот метод все еще намного быстрее, чем инициализация совершенно нового дерева Android с нуля.

Ответ 2

если ветвь, в которой вы находитесь, и ветвь, на которую вы переключитесь, имеют один и тот же файл manifest.xml, то вы можете использовать следующие команды для этого:

repo forall -c git fetch aosp --tags 
repo forall -c git checkout -b john5.1.1_r14_api22 android-5.1.1_r14

также см. подробности вhttp://johnliao52.github.io/2016/03/27/git-repo-skills.html