最近有個新項目,倉庫是一個個獨立的,最開始的時候采用單個倉庫git clone 下來,覺得效率太低 ,研究了下repo 和git submodule ,組合起來實現了代碼嵌套和批量管理。
首先寫一個manifest xml 文件,
<?xml version="1.0" encoding="UTF-8"?> <manifest> <notice>Code Fetch='0'</notice> <remote fetch="${gitserver}" name="origin" review="${review_server}"/> <project name="${gitpath1}" path="${lcoalpath1}" revision="master"/> <project name="${gitpath2}" path="${lcoalpath1}/${lcoalpath2}" revision="master"/> <project name="${gitpath3}" path="${lcoalpath1}/${lcoalpath3}" revision="master"/> </manifest>
然后把這個manifest 推送到manifest 倉庫里。
用repo init 命令拉下來這個代碼,repo init -m ${manifest_name} -u ${manifest_url} , repo sync 這樣會拉一套代碼下來,代碼結構已經實現了嵌套。但是此時在${localpath1}下git status,會發現提示需要git add 子庫,子庫現在對於gitpath1 這個倉庫而言是一個新的文件夾。
在后面git clean 強制clean的時候這個文件夾可能會被清除,也為了保證代碼看上去清爽,這時候就需要git submodule 上場了。
在${lcoalpath1} 下分別git submodule add <url> <path> 把兩個子庫加到git submodule 中去,然后git status, 會發現多了個.gitmodules 文件,git add , git commit git push 正常的操作流程之后,重新建個文件夾,repo init ,repo sync 下來會發現代碼結構ok, git status 也不再提示是新文件要git add了。
發現一個問題,只要不單獨用git submodule 更新代碼, .gitmodules 文件中的url 和branch 都是不生效的,會被repo manifest中的path和branch 覆蓋,不用擔心里面的配置會對代碼分支路徑的影響 。這樣就完美的實現了repo 控制代碼,git submodule 實現代碼嵌套。