repo切换分支

缘起

最近在搞一些Android源码的事情,需要频繁的切换Android的不同分支进行查看,因此基于repo的分支管理就很有必要来看一看了。

折腾经过

其他博客的做法

开始时搜了一些csdn博客的说法,结果根本就不是什么正确的方法,尤其是排在中文结果首位的,国内的很多技术博客都是这样,全是照搬,细节问题很多。

一般大家都写下面的步骤:

#查看仓库的所有分支
cd .repo/manifests
git branch -a | cut -d / -f 3

# 切换分支
repo init -b android-10.0.0_r39
repo sync
repo start android-10.0.0_r39 --all 

# 查看分支
repo branches

经过实践发现这种方法是有问题的,比如:我现在处于Android的master分支,要切换到10分支,上面的切换很可能会出错,提示有一些不在git跟踪列表的文件,导致最后的切换失败。

repo start更是一个非常错误的理解,这里的意思是:基于当前的代码库版本,拉出一个分支来,注意这个分支是本地分支,并不是Android远程仓库的分支,这个有很大的误导。

因为Android仓库的开发流程是这样的:

init某个远程分支
sync
start一个本地开发分支
完成后推送到远程Android仓库

而其他一些强制通过repo的forall git的checkout命令的操作,也是存在风险的,比如某一个仓库里没有这个分支的,这样也是一个非常大的误导,不要这么操作。

经过查阅后的方案

1、删除所有的本地检出文件(注意在源码根目录执行)

rm -rfv *

注意:这一步一定要在源码根目录执行,即android-10.0.0_r39目录里边,执行完之后这个文件夹还剩余一个.repo文件夹,这个不要删除,不然就相当于重新开始同步,非常慢了。

2、需要重新init目标分支

repo init -b android-10.0.0_r39

注意:这里没有-u参数设置仓库,不然会导致重新拉取很多已经存在的东西,导致切换很慢。

3、sync同步代码

repo sync -j4 -v

这一步如果本地已经存在的git对象,就不会重复拉取,速度比裸的拉取快很多,因此-u参数是不要加的。

总结

经过这一番折腾,有如下的感悟:
1、Android官方对这个repo工具说明的不明确,或者说我没找到正确的文档??反正这块的操作很迷,网上也不少人问,答案五花八门

2、一些博客的方法看似正确,细节上的东西都没讲,直接几个命令不一定能行的

3、不断学习,增加点看文档的习惯,理论上Android这个工作流程会在文档里详细描述的


参考文档

https://blog.51cto.com/14347056/2398039
https://stackoverflow.com/questions/14008113/how-to-switch-android-version-in-local-repo
https://stackoverflow.com/questions/53466008/repo-aosp-switch-between-branches
https://stackoverflow.com/questions/48511221/how-to-check-out-an-existing-feature-branch-with-android-repo-tool
https://repo-discuss.narkive.com/J0oejcPR/how-can-i-switch-branch-after-i-do-repo-init


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。