背景描述:
git 項目裏有使用到 git submodule ,然後使用了gitlab,當推送到gitlab上時,會觸發 .gitlab-ci.yml 進行一些自動化的構建,測試,發佈等等動作。其中有一步是要把gitlab上這個倉庫,歸檔(git archive)後,使用 rsync 到另一臺服務器上。
問題描述
在使用 git archive
的時候,發現並沒有把項目裏的submodule
裏的文件歸檔過去,只有一個submodule
的文件夾
目的
需要讓git submodule
裏的文件也能夠歸檔過去,這樣依賴才正常。在網上查詢了方法,發現有一個python 的庫,能夠使用其命令完成子模塊的歸檔,鏈接見此:link
思考:能不能不使用這個依賴庫,自己使用命令完成 ?
再次google後,發現一篇帖子給了我思路:link
大概的思路就是,1、先在父目錄使用git archive
後,再通過git submodule foreach
遍歷submodule,對sudmodule裏的文件進行git archive
,這樣最後,所有文件都能歸檔到一個地方了。
下面是部分shell
的代碼
# use HEAD if tag doesn't exist yet, so that development is easier...
PROJECT_NAME="rf_common"
git archive --format=tar --prefix=$PROJECT_NAME/ HEAD | (cd /Users/wei/Desktop/target/ && tar xf -) #歸檔父項目後解壓到指定目錄
# TODO: if git archive had a --submodules flag this would easier!
echo Running git archive submodules...
p=`pwd` && git submodule foreach | while read desc subdir; do
subdir=${subdir#*\'}; #去除最左邊的單引號
subdir=${subdir%*\'}; #去除最右邊的單引號
[ "${subdir}" = "" ] && continue; //加一步判斷,subdir爲""則continue
(cd ${subdir} && git archive --format=tar --prefix=${subdir}/ HEAD | (cd /Users/wei/Desktop/target/$PROJECT_NAME/ && tar xf -)); #歸檔submodule後解壓到父目錄
done