前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Git 中一个类似 Composer 的工具(二) – Subtree

Git 中一个类似 Composer 的工具(二) – Subtree

作者头像
沈唁
发布2019-01-23 14:30:47
7250
发布2019-01-23 14:30:47
举报
文章被收录于专栏:沈唁志沈唁志

之前有说过另外一个 Git Submodule,两个的作用基本类似

不过 Git Submodule 这是 Git 官方以前的推荐方案。从 Git 1.5.2 开始,Git 新增并推荐使用 Git Subtree 这个功能来管理子项目

Git Submodule 和 Git Subtree 都是官方支持的功能,不具有依赖管理的功能,但能满足我们的要求。Git Subtree 相对来说会更好一些

git subtree的主要命令有:

代码语言:javascript
复制
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 <子目录名> <子仓库名> <分支>

代码语言:javascript
复制
$ git subtree add --prefix git-submodule git@github.com:sy-records/git-submodule.git master --squash

--squash参数表示不拉取历史信息,而只生成一条 commit 信息

执行git status以后可以看到提示新增两条 commit :

代码语言:javascript
复制
$ 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查看详细修改:

代码语言:javascript
复制
$ git log
commit 8a53327502bb3c9dc3493cbca5e218b512954d36 (HEAD -> master)
Merge: 962fe07 a0d88ed
Author: sy-records <52o@qq52o.cn>
Date:   Sun Jan 6 19:09:39 2019 +0800

    Merge commit 'a0d88ed7453c453b498e078cdab303c52952ea84' as 'git-submodule'

commit a0d88ed7453c453b498e078cdab303c52952ea84
Author: sy-records <52o@qq52o.cn>
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 <子目录名> <子仓库名> <分支>

代码语言:javascript
复制
$ git subtree pull --prefix git-submodule git@github.com:sy-records/git-submodule.git master --squash

推送修改到源仓库

如果本地修改了git-submodule库,怎么推送上去呢?

语法:git subtree push --prefix <子目录名> <子仓库名> <分支>

代码语言:javascript
复制
# 执行正常 git add 以及 git commit

# 推送到 git-submodule 仓库 确认你有写权限
$ git subtree push --prefix git-submodule git@github.com:sy-records/git-submodule.git master

# 推送到 git-subtree 仓库
$ git push

简化 git subtree 命令

我们已经知道了git subtree的命令的基本用法,但是上述几个命令还是显得有点复杂,特别是子仓库的源仓库地址

这里我们把子仓库的地址作为一个 remote,方便操作:

语法:git remote add -f <子仓库名> <子仓库地址>

-f意思是在添加远程仓库之后,立即执行 fetch

代码语言:javascript
复制
$ git remote add -f git-submodule git@github.com:sy-records/git-submodule.git

然后可以这样来使用git subtree命令:

代码语言:javascript
复制
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

沈唁志,一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:Git 中一个类似 Composer 的工具(二) – Subtree

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 在父仓库中新增子仓库
  • 从源仓库拉取更新
  • 推送修改到源仓库
  • 简化 git subtree 命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档