分享

git教程(四)

 instl 2018-08-11
CSDN GitHub
git教程(四)–使用GIT SUBTREE集成项目到子目录 AderXCoding/system/tools/github/subtree

Git教程(一)—-初识Git

git教程(二)–安装和配置git

git教程(三)–创建项目并提交更新

本文
git教程(四)–使用GIT SUBTREE集成项目到子目录
转载自
使用GIT SUBTREE集成项目到子目录

1 subtree 介绍


1.1 使用背景


例如, 在项目Game中有一个子目录AI.

GameAI 分别是一个独立的 git 项目, 可以分开维护. 为了避免直接复制粘贴代码, 我们希望 Game 中的 AI 子目录与 AIgit 项目关联, 有3层意思:

  • AI 子目录使用 AIgit 项目来填充, 内容保持一致.

  • AIgit 项目代码有更新, 可以拉取更新到 Game 项目的 AI 子目录来.

  • 反过来, 当 Game 项目的 AI 子目录有变更, 还可以推送这些变更到 AIgit 项目.

git subtree 可以轻松满足上面的需求.

1.2 subtree对比submodule


如果你没有用过 git submodule, 你甚至可以不用了解 git submodule 是什么, submodule 的基本介绍也不在本文的说明范围内. 虽然它满足了上述差不多的需求, 但是复杂难用, 以至于需要这么长一篇教程才能说清楚用法.

如果你的项目正在使用 git submodule, 你应该知道用 submodule 有多么麻烦, 这里还有一篇文章专门解释 git submodule 的缺点, 可以参考前面教程里的最后一段来删除 submodule (是的, 连删除步骤都非常麻烦)

使用 git subtree 之后, 管理、更新都更加方便.

1.3 什么是git subtree


git subtree 是一条 git 子命令, 本质上 subtree 是一种合并策略, 从 git v1.5.2, 官方就推荐使用 subtree 代替 submodule, 所以它并不需要保存. submodule 这样的元信息.

git subtree 的前提条件

subtree 子命令很晚才集成到 git 中, 请确保你的 git 版本(使用 git --version 查看) > v1.8.0.0. 有些文章中说 v1.7.11 就已经集成了, 实际上没有, 如果直接执行会看到这样的结果:

git subtree  


git: 'subtree' is not a git command. See 'git --help'.
  • 1
  • 2
  • 3
  • 4

如果你是在 OS X 下使用 git, 推荐用 homebrew 来安装新版本

2 subtree的使用


针对第一段的3条需求, 我分别说明具体的命令.

2.1 创建 subtree 版本库


  • 第一次添加子目录, 建立与git项目的关联

建立关联总共有2条命令.

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

解释:其中-f意思是在添加远程仓库之后, 立即执行fetch.

语法:git subtree add –prefix=<子目录名> <子仓库名> <分支> –squash

解释:–squash意思是把subtree的改动合并成一次commit, 这样就不用拉取子项目完整的历史记录. –prefix之后的=等号也可以用空格.

示例

git remote add -f ai git@github.com:aoxu/ai.git  
git subtree add --prefix=ai ai master --squash
  • 1
  • 2

2.2 从远程仓库pull更新子目录


更新子目录有2条命令.

语法:git fetch <远程仓库名> <分支>

语法:git subtree pull –prefix=<子目录名> <远程分支> <分支> –squash

示例

git fetch ai master  
$git subtree pull --prefix=ai ai --squash
  • 1
  • 2

或者

git subtree pull --prefix=ai --squash git@github.com:aoxu/ai.git master
  • 1

2.3 从子目录push到远程仓库


推送子目录的变更有1条命令.

语法:git subtree push –prefix=<子目录名> <远程分支名> 分支

示例

git subtree push --prefix=ai ai master
  • 1

3 参考资料


speackerdeck

atlassian

pro git

非常棒的 SubTree 教程

一个真实场景的使用例子

Git Submodule 和 Git SubTree

Git submodule 还是 Git Subtree

使用GIT SUBTREE集成项目到子目录

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多