• git subrepo


    此文已由作者张磊授权网易云社区发布。

    欢迎访问网易云社区,了解更多网易技术产品运营经验。

    前言

    目前对 git 仓库拆分的已有实现之一,并没有合并到 git 发行版中。项目的地址是 https://github.com/ingydotnet/git-subrepo


    准备工作

    1. 首先创建主仓库 subrepo-master,随意提交一次文本,接着拉取到本地

    2. 建立子仓库 subrepo 和 subrepo1,随意提交一次文本

    3. Windows 安装稍显麻烦,通过安装 Cygwin ,并配置环境解决的。


    操作

    1. 添加子仓库

      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:   "???"
    2. 更新子仓库

      对子仓库远端做一次修改,然后更新它。git subrepo pull subrepo1,接着运行 git log,会发现这里像添加子仓库一样自动做了一次提交

    3. 修改主仓库、子仓库

      对主仓库、子仓库做修改并提交,同时修改远端主仓库、子仓库。这里如果有冲突,修改冲突的地方有点奇怪,是放在 .git/tmp/<dir> 下面,仔细看提示步骤,按照步骤走就可以顺利提交了。不过在这里也可以体验看设计思路,确实有兼容 git-subtree 和 git-submodule。


    缺点

    1. 文档有点少,好在项目还有些活跃

    2. Windows 下安装麻烦,体验极差,绝望


    优点

    1. 把官网的罗列搬出来即可(谷歌翻译+人工),而且只看命令确实挺有吸引力的

      它假定人们与仓库交互有三个主要角色,并试图为他们提供一切服务:

    2. 所有者 - 作者/拥有/维护仓库的人。

      用户 - 刚刚使用/安装仓库的用户。

      合作者 - 将代码提交给仓库和子仓库的人员。

      该 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 会失败的问题。


    技巧

    1. 命令表

       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


    参考

    1. https://github.com/ingydotnet/git-subrepo


    免费体验云安全(易盾)内容安全、验证码等服务

    更多网易技术、产品、运营经验分享请点击


    相关文章:
    【推荐】 AWS AutoScaling的一个ScaleDown策略问题以及解决方法
    【推荐】 spring分布式事务学习笔记(2)
    【推荐】 MongoDB之我是怎么成为Primary节点的

  • 相关阅读:
    ViewData,ViewBag,TempData
    http和https
    Array与ArrayList
    程序员与书和视频
    技术学习的方法研究
    文章发布声明
    面向对象JAVA多态性
    嵌入式开发总结
    CSDN博客代码显示乱码的原因
    将Windows的桌面目录设置到D盘
  • 原文地址:https://www.cnblogs.com/zyfd/p/9921083.html
Copyright © 2020-2023  润新知