之前有说过另外一个 Git Submodule,两个的作用基本类似
不过 Git Submodule 这是 Git 官方以前的推荐方案。从 Git 1.5.2 开始,Git 新增并推荐使用 Git Subtree 这个功能来管理子项目
Git Submodule 和 Git Subtree 都是官方支持的功能,不具有依赖管理的功能,但能满足我们的要求。Git Subtree 相对来说会更好一些
git subtree
的主要命令有:
git subtree add --prefix=<prefix> <commit>
git subtree add --prefix=<prefix> <repository> <ref> # <子目录名> <子仓库名> <分支>
git subtree pull --prefix=<prefix> <repository> <ref>
git subtree push --prefix=<prefix> <repository> <ref>
git subtree merge --prefix=<prefix> <commit>
git subtree split --prefix=<prefix> [OPTIONS] [<commit>]
--prefix
之后的=
等号也可以用空格
在父仓库中新增子仓库
例:执行以下命令将git-submodule
添加到git-subtree
中
语法:git subtree add --prefix <子目录名> <子仓库名> <分支>
$ git subtree add --prefix git-submodule [email protected]:sy-records/git-submodule.git master --squash
--squash
参数表示不拉取历史信息,而只生成一条 commit 信息
执行git status
以后可以看到提示新增两条 commit :
$ 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
git log
查看详细修改:
$ git log
commit 8a53327502bb3c9dc3493cbca5e218b512954d36 (HEAD -> master)
Merge: 962fe07 a0d88ed
Author: sy-records <[email protected]>
Date: Sun Jan 6 19:09:39 2019 +0800
Merge commit 'a0d88ed7453c453b498e078cdab303c52952ea84' as 'git-submodule'
commit a0d88ed7453c453b498e078cdab303c52952ea84
Author: sy-records <[email protected]>
Date: Sun Jan 6 19:09:38 2019 +0800
Squashed 'git-submodule/' content from commit 709687c
git-subtree-dir: git-submodule
git-subtree-split: 709687c94ed74ae3ddff0daffdd9a9adb29e3eb0
执行git push
即可
从源仓库拉取更新
如果git-submodule
源仓库更新了,git-subtree
怎么拉取更新呢?
语法:git subtree pull --prefix <子目录名> <子仓库名> <分支>
$ git subtree pull --prefix git-submodule [email protected]:sy-records/git-submodule.git master --squash
推送修改到源仓库
如果本地修改了git-submodule
库,怎么推送上去呢?
语法:git subtree push --prefix <子目录名> <子仓库名> <分支>
# 执行正常 git add 以及 git commit
# 推送到 git-submodule 仓库 确认你有写权限
$ git subtree push --prefix git-submodule [email protected]:sy-records/git-submodule.git master
# 推送到 git-subtree 仓库
$ git push
简化 git subtree 命令
我们已经知道了git subtree
的命令的基本用法,但是上述几个命令还是显得有点复杂,特别是子仓库的源仓库地址
这里我们把子仓库的地址作为一个 remote,方便操作:
语法:git remote add -f <子仓库名> <子仓库地址>
-f
意思是在添加远程仓库之后,立即执行 fetch
$ git remote add -f git-submodule [email protected]:sy-records/git-submodule.git
然后可以这样来使用git subtree
命令:
git subtree add --prefix git-submodule git-submodule master --squash
git subtree pull --prefix git-submodule git-submodule master --squash
git subtree push --prefix git-submodule git-submodule master
请问滑稽大佬,你什么时候断更
@西枫里博客 emmm, 快了快了,西西里大佬 😎