查看 repo help sync 命令的帮助说明,该命令的格式如下:

  • Usage: repo sync [<project>...]

可以看到,它没有提供参数来指定要同步的远端服务器分支。那么在执行 repo sync 时,它同步的是远端服务器的哪个分支?

实际上,repo sync 默认同步在 repo init 时由 -b 选项指定的分支,这也是 repo 所跟踪的分支。

注意:如果本地的 git 仓库切换过分支,当前分支名和 repo init -b 指定的分支名不一样,那么执行 repo sync 会改变本地分支指向,需要注意到这个分支的变化,避免后续操作错分支。

下面具体举例说明 repo sync 后本地分支的变化,在这个例子一开始,本地当前分支名是 branch_m,这不是 repo init -b 所指定的分支。

1.使用 git branch 命令,打印出当前分支名是 branch_m:

$ git branch
  other_branch_xxx
* branch_m

2.在当前代码目录下执行 repo sync 命令:

$ repo sync .
Fetching project platform/packages/apps/Settings
packages/apps/Settings/: leaving branch_m; does not track upstream

3.再次执行 git branch 命令,会看到当前处于没有命名的分支下:

$ git branch
* (detached from f15a7be)
  other_branch_xxx
  branch_m

基于这个现象,建议在本地所有分支都关联到远端服务器分支时,才用 repo sync 来同步代码。

如果本地当前分支没有关联到远端服务器分支,使用 repo sync 同步之后,分支指向会发生变化,后续修改代码,并不是位于原来分支下面,如果要提交修改到原来的分支,会提示需要 merge,容易造成代码冲突,比较麻烦。


霜鱼片
446 声望331 粉丝

解读权威文档,编写易懂文章。如有恰好解答您的疑问,多谢赞赏支持~