Что происходит за кулисами, когда я выполняю синхронизацию репо?

Что происходит за кулисами, когда я делаю repo sync в моем репозитории Android?

Это эквивалентно repo forall -c "git pull" или, может быть, git fetch? Или это делает что-то более сложное?

Спасибо

Ответ 1

Вот описание этой страницы того, что делает repo sync. В обычном случае он будет больше похож на git pull --rebase, чем git pull. Чтобы процитировать, что говорит эта страница:

Как работает синхронизация репо

Когда вы запускаете репо-синхронизацию, это происходит:

  • Если проект никогда не был синхронизирован, то синхронизация репо эквивалентна git clone. Все ветки в удаленном репозитории копируются в локальный каталог проекта.

  • Если проект уже синхронизирован один раз, то синхронизация репо эквивалентна:

    git remote update
    git rebase origin/branch
    

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

    Если операция reba git приводит к конфликтам слиянием, вам нужно будет использовать обычные команды git (например, git rebase --continue) для разрешения конфликтов.

Команда repo sync также обновляет частные репозитории в каталоге .repo/.

По существу git remote update обеспечивает, чтобы ваши ветки удаленного отслеживания (включая origin/branch) были обновлены, запустив git fetch origin. (На самом деле поведение git remote update более сложное, чем это, и зависит от вашей конфигурации git, но в типичной настройке он будет запускать git fetch [remotename] для каждого из ваших пультов.) Затем git rebase origin/branch перезаписывает ваш branch, переигрывая все ваши коммиты, которые не присутствуют выше на origin/branch.