Git依赖subtree

Git依赖——subtree

 与submodule相比,subtree的优势在于主项目与子模块的双向 通信,即主项目中可以更改子模块的 文件,并将改动推送至子模块的远程git库。
 subtree的操作:增、改、删。

subtree的增加

 主项目中 依赖 子模块

前期准备:初始化 两个项目 parent和child,

步骤:
    ①主项目中添加 子项目远程库
        git remote add 别名 url
    ②主项目中依赖子项目:
        git subtree add --prefix=路径 别名 分支 --squash
        
        路径:子项目文件的存放位置
        别名:第一步添加 远程库 所起的别名
        分支:拉取子项目的分支
        --squash:添加依赖的方式,该参数 会将 子项目的多次提交 压缩为 一次提交
        
     
     git remote add sub-origin url //添加子模块,子模块的别名为sub-origin
     
     git subtree add --prefix=subtree sub-origin master --squash
     控制台输出:
        git fetch sub-origin master
        warning: no common commits //并没有共同的提交
        ···
            * branch            master     -> FETCH_HEAD //当前的master分支 指向了 FETCH_HEAD
            * [new branch]      master     -> sub-origin/master //新建了分支 
        Added dir 'subtree' //新建了 subtree文件件
     
     git status
     控制台输出:
        On branch master
        Your branch is ahead of 'origin/master' by 2 commits. //分支比 本地远程分支 多了两次提交
         (use "git push" to publish your local commits)
        nothing to commit, working tree clean

    为什么两次呢? 因为squash
    git log
    控制台输出:
    commit 29583eab27f08f43324aa1a591a7ea2d6a30c898 //这次提交是 拉取文件之后 合并,合并作为一次提交记录
    Merge: 40a8a5d 19b14f6  //合并的id
        Merge commit '19b14f64f1ea9c135b7ea4bac1936a62ec32616a' as 'subtree'

    commit 19b14f64f1ea9c135b7ea4bac1936a62ec32616a //这是子模块 的提交压缩,将压缩 作为一次提交
    Squashed 'subtree/' content from commit a45b65c //从a45开始压缩
        git-subtree-dir: subtree
        git-subtree-split: a45b65c3237f74ee3ab50e32e225a2e26cb6ba58

    commit 40a8a5d994ef659cc42c9d95980dd69f91fc87a1
        init parent
    
将修改push
    git push

主模块更新子模块

 主模块修改 子模块的文件,并将文件 推送至远端。

    使用命令:
        git subtree --prefix=路径 别名 分支 --squash
        
        路径:子项目文件的存放位置
        别名:第一步添加 远程库 所起的别名
        分支:拉取子项目的分支
        --squash:添加依赖的方式,该参数 会将 子项目的多次提交 压缩为 一次提交
        
    步骤:
        ① 修改文件,并本地提交
        ② 将修改推送至 远端
            先将主模块 推送至远端 git push
            再推送子模块 git subtree push --prefix=路径 别名 分支 --squash

你可能感兴趣的:(Git依赖subtree)