美文网首页
git归档时如何同步子模块文件

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

作者: 想落天外77 | 来源:发表于2020-02-18 23:28 被阅读0次

    背景描述:

    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
    

    相关文章

      网友评论

          本文标题:git归档时如何同步子模块文件

          本文链接:https://www.haomeiwen.com/subject/ufcofhtx.html