关于git 子仓库管理的一些实验及结论(git subtree)

  1. 关于子仓库管理的概念性区分("git submodule is link. git subtree is copy")
  2. 无论新增子仓库、从子仓库拉取、向子仓库推送,都需要 <prefix> <repo-path> <branch> 这些选项。(实际参数实例 --prefix=testBakSubtree D:\shareTemp\test\playground2\repos\subtree.git master)
  3. 父仓库可以通过 git subtree pull --prefix=testBakSubtree D:\shareTemp\test\playground2\repos\subtree.git master 拉取子仓库信息。前提是要先执行增加子仓库命令 git subtree add <prefix> <repo-path> <branch>
  4. 父仓库可以通过 git subtree push <prefix> <repos-path> <branch> 推送更新到子仓库源码管理中。但如果想子仓库顺利接受推送,那这个子仓库要是一个裸仓库。需要指出的是,从子仓库拉取时,不要求子仓库是裸仓库。推送只会推送子仓库相关更新

参考:

  1. https://www.cnblogs.com/goloving/p/16678440.html "浅析Git Subtree的原理与实际应用:git subtree是什么、子仓库与仓库共用、共用代码需求常规处理方式及为什么使用git subtree以及如何使用Git Subtree在多个Git项目间双向同步子项目"

延申

裸仓库概念

  1. 裸仓库是一个没有工作区的 Git 仓库(即仅含 .git 目录的仓库)
  2. stackoverflow 上的一个讨论 提出了 3 种方式从普通仓库转换为一个裸仓库。这些方式体现在 仓库初始化的方式配置文件的处理钩子的保留工作区的处理
    1. 通过移动 .git 目录并设置 core.bare 属性创建的裸仓库
    2. 通过 git clone --bare 创建的裸仓库
    3. 通过 git clone --mirror 创建的裸仓库
posted @ 2024-11-27 14:54  jankz  阅读(1)  评论(0编辑  收藏  举报