题图:Photo by Pankaj Patel on Unsplash
本文原创发布于微信公众号“洛奇看世界”。
大概从2014年开始接触Android,也从那时起开始使用repo,但我从来没有认真去学习过repo的用法,每次都是要用的时候才去百度一下。以至于一直以来,只会repo init和repo sync这两个命令,前者用于下载manifest清单,后者根据manifest清单同步代码。尽管这两个命令很简单,但是我每次都要先copy别人的命令,复制粘贴后再修改一下。
像我这样机械地先copy别人的命令,改一改再运行,有跟我一样的嘛?
以下是一些我曾经或现在使用repo的场景,这些问题或许在别人看来都不是问题,但当时确实难倒我了,因此每次都要反复折腾,浪费很多时间。
最常见的有:
1. repo init操作时无法下载git-repo库
这是我使用repo遇到的第一个问题。'repo init'操作的第一步就是同步repo库,官方地址:
https://gerrit.googlesource.com/git-repo
因为一些众所周知的原因,无法访问这个地址并获取代码。
在公司可以翻墙,但是家里完全没有办法。情急之下,硬着头皮研究了repo脚本,最后把远程的repo库指向本地repo库才得到解决。后来还在CSDN上写了一篇通过设置REPO_URL环境变量,指向一个可访问的git-repo库来避开这个问题的文章。后来觉得这篇文章太low,自己删掉了。最近想恢复这篇文章,但是已经找不到了。
解决git-repo库无法访问的方式有几种,你都是如何解决的啊?
2. 多个版本代码的验证
常常需要在多个版本上验证Android的某个功能,看是否有差别。例如,需要在在Android N/O/P这三个版本上验证4k码流的播放,或者这三个版本在统一平台上启动速度的差别。
我以前是这么做的: 找三个平台和三个版本的代码,从零开始克隆manifest, 接着执行repo sync从0开始同步代码,然后坐等同步完成。
由于小组部门没有搭建专门的Android代码服务器,最近的代码也需要从北京的服务器同步,加之公司网速不好,完全同步一次差不多要一个白天或晚上,等同步完成才开始工作,还不用说有时同步失败的情况。反正同步一下一天就过去了。
这个描述虽然有些夸张,但这就是实际情况。
如果从其它版本的repo库上开始同步或本地搭建一个mirror镜像,这个问题很容易就解决了。但我当时根本不知道还有办法可以加快速度,只能说明我蠢啊~
3. 只有.repo目录
这是另外一个让人相当无语的情况。
有时候为了节省空间,会将工作目录下的代码删除,只对.repo目录进行打包。第一次拿到这个.repo目录时束手无策,不知道如何从.repo目录取出代码~
以前只知道repo sync可以检出代码,所以就在目录下执行一遍repo sync命令,结果一同步,manifest清单也跟着更新,代码变成最新的了。如果需要最新的代码这倒也无所谓,但很多时候只想验证某个特定版本的代码,这样同步根本拿不到想要的版本,简直就是噩梦啊。
后来学了一招,使用repo start命令新开一个分支,总算是解决了这个问题。但是我这人有强迫症,根本看不惯代码凭空多出来这么一个分支啊,十分不爽。
那时候根本不知道'repo sync -l'就是根据manifest指定的版本检出代码到本地工作目录,所以重新同步吧,又是一天过去了。
4. 从不在本地搭建repo镜像
以前知道repo init命令有一个'--mirror'选项,但不知道如何使用,所以从来没在本地使用过mirror功能,每次只能从远端同步,也是够够的了。
5. 不知道如何提交更改到gerrit
这是只有在进行代码review时才会进行的操作。印象特别深刻,因为第一次的时候囧到头了。
刚接触Android时接了一个任务,对4.4的KitKat版本添加ubifs文件系统支持。代码修改好了,但推送的补丁review没通过,要重新修改。修改完成后第二次推送失败了,如何正确推送,不知道啊~ 当时我是小组里第一个用repo的,也是第一个用git的,想找个人问问,没后对象啊。然后写邮件给老美求救如何进行推送,结果人家没回我。那时我觉得可以因为问题太低级别人不愿意回,现在想想,有可能别人漏掉了我的邮件,也有可能邮件没有写清楚,别人没搞明白。
无奈之下,买了蒋鑫的《Git权威指南》,花了几天看完终于知道如何推送了。
《Git权威指南》确实是本好书,非常全面,我看完基本就能给同事答疑各种git问题,并照着书上写的负责git服务器搭建和管理了,后来还给办公室的同事做了git培训。
啰嗦了一大堆,想说的是以前觉得repo只是个小工具,不需要花很多时间去学习,要用时网上查一查就好了。但最后在repo上浪费了很多时间。如果当初能花点时间学习整理下repo,可以省下更多时间,所谓磨刀不误砍柴工啊。
最近偶然发现,这么多年过去了,网上仍然没有全面系统介绍repo的文章,搜索的结果基本都还是一些repo基本用法的介绍,有的甚至连介绍都算不上。
于是萌发了想自己写点东西介绍repo的想法,但写东西终究是为了解决实际问题,所以想在这里了解下大家的想法,包括各种使用场景,各种常见的问题。如果你在使用repo时遇到什么困难或对repo的使用有什么心得或建议,请在留言区、公号后台或微信上一起探讨。我会收集这些问题,并整理共享出来,方便后来的人。
联系和福利
- 本文原创发布于微信公众号“洛奇看世界”,一个大龄2b码农看世界。
- 关注微信公众号“洛奇看世界”
- 回复关键词“Android电子书”,获取超过150本Android相关的电子书和文档。电子书包含了Android开发相关的方方面面,从此你再也不需要到处找Android开发的电子书了。
- 回复关键词“Git",获取经典的Git电子书