git归档时如何同步子模块文件

2020-02-18  本文已影响0人  想落天外77

背景描述:

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
上一篇 下一篇

猜你喜欢

热点阅读