git歸檔時如何同步子模塊文件

背景描述:

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章