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
网友评论