GIT共享 跨仓库操作 子模块

初级代码游戏的专栏介绍与文章目录-CSDN博客

有些文件想在多个项目共享,但是又不能放在一个GIT仓库里,这要用到子模块(submodule),说难不难,就是有些细节要注意。

不过说真的,共享向来不是个好主意。

目录

一、操作

[1.1 添加子模块](#1.1 添加子模块)

[1.2 提交、更新子模块](#1.2 提交、更新子模块)

[1.3 主模块下更新子模块](#1.3 主模块下更新子模块)

二、注意事项


以下均基于TortoiseGit客户端。

一、操作

1.1 添加子模块

在工作目录(含有.git目录的地方)下点右键"添加子模块",选择版本库路径和本地目录名,本地目录下多出一个子模块的目录和一个.gitmodules文件,这个文件记录了子模块信息,新建的目录则包含了共享的那个版本库的最新版本文件。

1.2 提交、更新子模块

进入子模块的目录,可以提交、更新共享的版本库的内容,就像一个普通的仓库和工作目录一样,只不过"提交"变成了"提交子模块"。会提示设置用户名和邮箱。

1.3 主模块下更新子模块

在主项目的工作目录下"更新子模块"可能会获得子模块的最新内容,也可能什么都不会发生。新克隆只会得到子模块的空目录,必须执行"更新子模块"才能获得子模块的内容。主项目里只管理子模块的版本号,子模块的版本有变化(发生了提交或拉取),则主项目的子模块产生一条变更。记住这一点很重要,提交或拉取了子模块一定要同时提交主项目的子模块记录。

二、注意事项

  1. 在主项目的工作目录下"更新"会得到别人添加的子模块的入口,但不会得到子模块的内容。
  2. 获得子模块的最新内容需要在子模块下更新,就是1.2的做法。
  3. 首次在子模块下拉取可能会提示分支切换,切换即可。首次在主项目下同步也可能提示分支问题,但无法切换,执行一次提交(会提示设置用户名和邮箱)即可(并不需要实际有改动)。似乎这是客户端的BUG而已。
  4. 提交主项目会提示"子模块不洁净",建议同时提交子模块,如果选择"放弃"则不会提交子模块,选择"提交"则执行一次子模块的提交。很显然,子模块的内容还是在共享的仓库里的,主项目的仓库只是做了链接。
  5. 鉴于子模块更新可能操作不当,建议同时保持一个独立的子模块,这样容易比较是不是正确进行了更新。
  6. 在主项目的子模块做了提交,但没有提交主项目(此时主项目的变更项目里面有一行表示子模块),然后在主项目执行"更新子模块",会把子模块还原到之前的版本,刚才的提交会丢失(当然,可以通过跟在子模块更新同步回来)。这说明主项目记录了子模块的版本,主项目跟子模块相关的变更项就是记录这个版本信息的。主项目"更新子模块"就是更新这个版本信息,更新时没有发现本地版本更新,这或许是个BUG。

(这里是结束)

相关推荐
荔枝吻4 小时前
【AI总结】Git vs GitHub vs GitLab:深度解析三者联系与核心区别
人工智能·git·github
mrbone115 小时前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
小哈龙6 小时前
裸仓库 + Git Bash 搭建 本地 Git 服务端与客户端
开发语言·git·bash
GISer_Jing16 小时前
Git协作开发:feature分支、拉取最新并合并
大数据·git·elasticsearch
高山莫衣21 小时前
git rebase多次触发冲突
大数据·git·elasticsearch
码农藏经阁21 小时前
工作中常用的Git操作命令(一)
git
kobe_OKOK_1 天前
【团队开发】git 操作流程
git·elasticsearch·团队开发
码农垦荒笔记1 天前
Git 安装闭坑指南(仅 Windows 环境)
windows·git
CC码码1 天前
管理你的多个 Git 密钥(多平台多账号)
git·gitlab·github
CC码码1 天前
管理你的多个 Git 密钥(单平台多账号)
git·gitlab·github