在用户根目录先创建用于存放仓库objects的仓库目录,建议创建隐藏目录,避免误删。
-Bash 代码
1
~$ mkdir .repository
1.2 存放object到仓库中心
a.方法一:本地从未下载过代码,可以考虑创建全量仓库mirror ,在repo init后添加--mirror参数
-Bash 代码
1
~$ cd .repository
2
$ repo init -u http://szxgit10-rd.huawei.com:8080/HIS/dpt -b HiDPTAndroidP/v350 --mirror
3
$ repo sync
repo sync不用添加参数,创建mirror不用添加参数,添加了也不会生效,会全量更新所有仓库信息。包括下载代码仓库的所有分支,所有tags。可视服务器情况添加-jxx。
b. 方法二:repo init后,repo sync时添加-n参数
-Bash 代码
1
~$ cd .repository
2
$ repo init -u http://szxgit10-rd.huawei.com:8080/HIS/dpt -b HiDPTAndroidP/v350
3
$ repo sync -c -n --force-sync --no-clone-bundle --no-tags
4
$ mv .repo/project-objects/* ./
repo sync参数说明:
-c 表示仅下载当前分支,减少下载空间和下载打印,如下日志示意未添加-c参数
From http://szxgit10-rd.huawei.com:8080/HIS/HIS_DPT_GIT/HiDPTLinux/Code/source/msp/drv/sci
* [new branch] HiDPTAndroidK/iptv -> HiDPTLinux/HiDPTAndroidK/iptv
* [new branch] HiDPTAndroidK/update -> HiDPTLinux/HiDPTAndroidK/update
* [new branch] HiDPTAndroidL/HiDPTV3R1_for_isdbt_filipine -> HiDPTLinux/HiDPTAndroidL/HiDPTV3R1_for_isdbt_filipine
* [new branch] HiDPTAndroidL/nts -> HiDPTLinux/HiDPTAndroidL/nts
* [new branch] HiDPTAndroidN/dtv -> HiDPTLinux/HiDPTAndroidN/dtv
-n 表示仅网络同步,不checkout代码,即不会生成工作区,不会生成代码
--force-sync 表示覆盖现有.git目录
--no-tags 表示不下载tag,减少下载空间和下载打印,如下日志示意未添加--no-tags参数
From http://szxgit10-rd.huawei.com:8080/TC_HiDolphin_GIT/Android/androidp/packages/providers/ContactsProvider
* [new branch] HiCAMAndroidP/master -> HiDPTAndroid/HiCAMAndroidP/master
* [new branch] HiDPTAndroid/master -> HiDPTAndroid/HiDPTAndroid/master
* [new branch] HiDPTAndroidP/maintain -> HiDPTAndroid/HiDPTAndroidP/maintain
* [new branch] HiDPTAndroidP/maintain_commercial -> HiDPTAndroid/HiDPTAndroidP/maintain_commercial
* [new branch] HiDPTAndroidP/master -> HiDPTAndroid/HiDPTAndroidP/master
* [new branch] HiDPTAndroidP/temp -> HiDPTAndroid/HiDPTAndroidP/temp
* [new branch] HiDPTAndroidP/v350_SampleBack -> HiDPTAndroid/HiDPTAndroidP/v350_SampleBack
* [new branch] HiDPTAndroidP/v350_forICSL -> HiDPTAndroid/HiDPTAndroidP/v350_forICSL
--no-clone-bundle 表述不使用clone.bundle,由于我们gerrit服务器未使用clone.bundle,添加该参数只为减少报错打印,便于下载定位
如下示意未添加--no-clone-bundle,有被忽略的404的错误打印
Fetching project TC_HiDolphin_GIT/Android/androidp/external/libdaemon
0 0 0 0 0 0 0 0 --: --: -- --: --:-- --:--:-- 0
curl: (22) The requested URL returned error: 404 Not Found
Server does not provide clone.bundle; ignoring.14.33 MiB/
-q 表示安静模式,除了报错信息,其他不打印
更多参数信息,使用repo sync --help查看,不再列举
c.方法三:本地已有下载代码,直接通过原仓库移动到object到仓库中心
-Bash 代码
1
~$ cd .repository
2
$ mv ~/workspace/V6R1/.repo/project-objects/* ./
1.3 复用创建好的仓库中心
a. 创建工作空间
-Bash 代码
1
~$ mkdir -p workspace/V7R1
2
$ cd workspace/V7R1/
b. repo init
-Bash 代码
1
$ repo init -u http://szxgit10-rd.huawei.com:8080/HIS/dpt -b HiDPTAndroidP/v350
c. 复用package
-Bash 代码
1
$ ln -s ~/.repository .repo/project-objects
d. 更新代码
-Bash 代码
1
$ repo sync -c --no-tags --force-sync --no-clone-bundle
多份代码可同步复用,删除工作区时,由于软链接,.repository也不会被删除,下次可以继续使用。
2. 方法总结
创建复用仓库中心有几种方式,各有优劣,通过--mirror的方式,下载代码最为全面,可以应对多种场景。但劣点也很明显,比第二种方法多占用较多空间。建议平常
经常使用多个分支来回切换,常做做分支同步的同学使用方法一。平时仅在一个分支上开发代码,几乎不使用其他分支的同学建议使用方法二,三。
复用的.repository也会越来越大,越来越冗余,所以建议一个月做一次gc操作,参考命令如下。
-Bash 代码
1
$ repo forall -j32 -c "git gc"
2
$ find .repo -name "tmp_pack*" -delete