Является ли «repo syn c» эквивалентным «git удаленному обновлению && git rebase origin / branch»? - PullRequest
2 голосов
/ 25 марта 2020

В документации repo sync указано, что:

If the project has been synchronized before, then repo sync is equivalent to:

git remote update
git rebase origin/branch

where branch is the currently checked-out branch in the local project directory. If the local branch isn't tracking a branch in the remote repository, then no synchronization occurs for the project.

Это означает, что после успешного однократного repo init && repo sync я могу использовать

$ repo forall -c git update
$ repo forall -c git checkout -b $REPO_RREV $REPO_REMOTE/$REPO_RREV
$ repo forall -c git pull $REPO_REMOTE $REPO_RREV

для достижения того же результата, что и repo sync.

Меня беспокоит следующее:

  • Если repo - это инструмент, который управляет несколькими git репозитории с помощью файла manifest. xml, что произойдет, если манифест изменится в удаленном репозитории (upstream)?
  • Если, например, новый репозиторий будет добавлен в манифест. xml файл, как repo sync эквивалентно git remote update && git rebase origin/branch?
  • Разве repo sync также не обновляет файл манифеста . xml и затем извлекает только что добавленный репозиторий? Потому что, если это так, то repo sync явно не эквивалентно repo forall -c git remote update && repo forall -c git rebase origin/branch.

Является ли repo sync эквивалентным git remote update && git rebase origin/branch или в документации что-то отсутствует? Может кто-нибудь уточнить, как действительно repo sync работает под капотом с этой точки зрения?

1 Ответ

0 голосов
/ 03 апреля 2020

Этот ответ основан на том, что я понял из ссылки do c , которую вы упоминаете в своем вопросе:

  • repo sync не выполняется на на подпроекты, поэтому изменения в их manifest.xml не будут затронуты, если они есть;

  • в do c есть несколько "If"; тот, что перед вашей цитатой гласит:

  • Если проект никогда не был синхронизирован, то repo sync эквивалентно git clone. Все ветви в удаленном репозитории копируются в локальный каталог проекта.
  • repo sync обновляет проекты, перечисленные в этом манифесте, а не сам проект root, поэтому ваш root manifest.xml файл не изменяется этой командой.

Если вы хотите эмулировать repo sync с repo forall ..., вам действительно необходимо принять во внимание действия для нового репо: git clone и, возможно, некоторых других команд.

Проверьте вывод repo --trace sync, как предложено @ElpieKay.

...