此文已由做者张磊受权网易云社区发布。
html
欢迎访问网易云社区,了解更多网易技术产品运营经验。git
目前对 git 仓库拆分的已有实现之一,并无合并到 git 发行版中。项目的地址是 https://github.com/ingydotnet/git-subrepogithub
首先建立主仓库 subrepo-master,随意提交一次文本,接着拉取到本地web
创建子仓库 subrepo 和 subrepo1,随意提交一次文本数据库
Windows 安装稍显麻烦,经过安装 Cygwin ,并配置环境解决的。安全
添加子仓库fetch
git subrepo clone <repository> [<subdir>] [-b <upstream-branch>] [-f] 这里的 repository 能够用添加的 remote 的别名。子仓库添加完成,会发现目录多了一个,并且进去后发现有一个文件 .gitrepo,打开看到记录了 subrepo 执行的一些信息。同时运行 git log 发现多了一次提交。因为存在 .gitrepo 文件,就不须要像 git-subtree 同样每次都要指定 remote url,后续能够直接用目录名更新。url
git subrepo clone (merge) --branch=a subtree1 subtree1 subrepo: subdir: "subtree1" merged: "8a62c0e" upstream: origin: "subtree1" branch: "a" commit: "8a62c0e" git-subrepo: version: "0.4.0" origin: "???" commit: "???"
更新子仓库spa
对子仓库远端作一次修改,而后更新它。git subrepo pull subrepo1,接着运行 git log,会发现这里像添加子仓库同样自动作了一次提交命令行
修改主仓库、子仓库
对主仓库、子仓库作修改并提交,同时修改远端主仓库、子仓库。这里若是有冲突,修改冲突的地方有点奇怪,是放在 .git/tmp/<dir> 下面,仔细看提示步骤,按照步骤走就能够顺利提交了。不过在这里也能够体验看设计思路,确实有兼容 git-subtree 和 git-submodule。
文档有点少,好在项目还有些活跃
Windows 下安装麻烦,体验极差,绝望
把官网的罗列搬出来便可(谷歌翻译+人工),并且只看命令确实挺有吸引力的
它假定人们与仓库交互有三个主要角色,并试图为他们提供一切服务:
全部者 - 做者/拥有/维护仓库的人。
用户 - 刚刚使用/安装仓库的用户。
合做者 - 将代码提交给仓库和子仓库的人员。
该 git-subrepo 命令经过如下方式为这些角色带来好处:
简单而直观的命令行使用。
用户只需克隆仓库就能够得到仓库和全部的子仓库。
用户不须要安装 git-subrepo,永远。
合做者不须要安装,除非他们想 push/pull。
当一个 subdir 是一个 subrepo(它有一个.gitrepo文件)时,协做者知道。
为手动操做生成命名分支和远程控制。
业主不处理保持子模块同步的复杂性。
Subrepo 存储库自己能够包含 subrepos。
不一样的分支能够在不一样的状态有不一样的 subrepos 等。
你能够 init 将现有的子目录转换为子仓库。
你的 git 历史保持清晰。
上游历史记录(clone/pull)被压缩为一次提交。
你能够看到 subrepo 历史经过 git log subrepo/<subdir>/fetch。
推回上游的提交不会被压缩。
试错成本低。
无需配置。
不会引入历史来混淆其余 git 命令。
修复已知的 git-subtree 使用 rebase 会失败的问题。
命令表
git subrepo -h # Help Overview git subrepo clone <remote-url> [<subdir>] git subrepo init <subdir> git subrepo pull <subdir> git subrepo push <subdir> git subrepo fetch <subdir> git subrepo branch <subdir> git subrepo commit <subdir> git subrepo merge-base <branch1> <branch2> git subrepo status [<subdir>] git subrepo clean <subdir> git subrepo help [<command>] git subrepo version
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 数据库路由中间件MyCat - 源代码篇(4)