git subrepo
此文已由作者张磊授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
前言
目前对 git 仓库拆分的已有实现之一,并没有合并到 git 发行版中。项目的地址是 https://github.com/ingydotnet/git-subrepo
准备工作
首先创建主仓库 subrepo-master,随意提交一次文本,接着拉取到本地
建立子仓库 subrepo 和 subrepo1,随意提交一次文本
Windows 安装稍显麻烦,通过安装 Cygwin ,并配置环境解决的。
操作
添加子仓库
git subrepo clone <repository> [<subdir>] [-b <upstream-branch>] [-f] 这里的 repository 可以用添加的 remote 的别名。子仓库添加完成,会发现目录多了一个,而且进去后发现有一个文件 .gitrepo,打开看到记录了 subrepo 执行的一些信息。同时运行 git log 发现多了一次提交。由于存在 .gitrepo 文件,就不需要像 git-subtree 一样每次都要指定 remote 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: "???"更新子仓库
对子仓库远端做一次修改,然后更新它。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)
git subrepo的更多相关文章
- dubbo事件通知机制(1)
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. dubbo事件通知机制:http://dubbo.io/books/dubbo-user-book/demos ...
- git subtree 使用
这个是备忘录.原网页(https://medium.com/@porteneuve/mastering-git-subtrees-943d29a798ec , http://cncc.bingj.co ...
- git 仓库拆分方案对比
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 git 拆分仓库在网上已有的案例上来看,分为 submodule 和 subtree. 还有基于这两个方 ...
- Git 子模块 - submodule
有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你 独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另 ...
- Git 在团队中的最佳实践--如何正确使用Git Flow
我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确使用. Git的优点 Git的优点很多,但是这里只列出我认为 ...
- Git与Repo入门
版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本,多人协作... 一.原始版本控制 最原始的版本控制是纯手工的版本控制:修改文 ...
- Git Bash的一些命令和配置
查看git版本号: git --version 如果是第一次使用Git,你需要设置署名和邮箱: $ git config --global user.name "用户名" $ gi ...
- 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net
1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
随机推荐
- UGUI BUG
UNITY UGUI问题:父类使用 GroupLayout,子类使用contentsize filter时,会出现运行时布局重叠,但隐藏后再显示就会好了.
- 【310】◀▶ Python 日期和时间
参考: python 时间日期计算 Python 日期和时间(菜鸟教程) 8.1. datetime — Basic date and time types python中datetime模块中dat ...
- iOS布局之Auto Layout
学习资源: <iOS6核心编程>自动布局部分 <iOS6范例经典>自动布局部分 Tutorial: iOS 6 Auto Layout versus Springs and S ...
- 用Pylint规范化Python代码,附PyCharm配置
Pylint一个可以检查Python代码错误,执行代码规范的工具.它还可以对代码风格提出建议. 官网:https://pylint.readthedocs.io pip install pylint ...
- 团队作业4Alpha冲刺
仓库地址:https://gitee.com/ILoveFunGame/game_strategy_network.git 第一天 2018/6/13 1.1 今日完成任务情况以及遇到的问题. 1.1 ...
- Spark scala和java的api使用
1.利用scala语言开发spark的worcount程序(本地运行) package com.zy.spark import org.apache.spark.rdd.RDD import org. ...
- 网页静态化解决方案:Freemarker生成简单html页面
FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输出.FreeMarker与 Web 容器无关,即在 Web 运行时,它并不知道 Servlet 或 HTTP.它不仅 ...
- 一个word小技巧
最近在进行word格式重拍的时候发现了一个有些恶心的事,怎么去匹配文档里面所有的中文呢? 后来通过网络搜索发现了答案,在word中的查找和替换中有一个选项,可以使用通配符进行匹配. 当我们使用 ([一 ...
- JS中深拷贝数组、对象、对象数组方法(转载)
我们在JS程序中需要进行频繁的变量赋值运算,对于字符串.布尔值等可直接使用赋值运算符 “=” 即可,但是对于数组.对象.对象数组的拷贝,我们需要理解更多的内容. 首先,我们需要了解JS的浅拷贝与深拷贝 ...
- css3中的transform、transition、translate、animation(@keyframes)的区别
一.前言 在CSS中,我们经常会使用到transform.transition.translate.animation(@keyframes)这些长得相似,又不好区分的属性(值).每当需要使用它们,都 ...