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。

(这里是结束)

相关推荐
正经教主7 小时前
【Git】Git05-01:Git 远程仓库协作流程原理
git·gitlab·github
QT 小鲜肉7 小时前
【Linux常用命令大全】在 Linux 系统下 Git + Vim编辑器常用指令完全指南(亲测有效)
linux·开发语言·c++·笔记·git·编辑器·vim
Protein_zmm8 小时前
Git使用
git
大筒木老辈子13 小时前
Git笔记---远程仓库的创建与基本操作
笔记·git
9***Y4814 小时前
终于解决了!Git拉取代码冲突的处理
git
南屿欣风16 小时前
Idea中Git切换分支,如何确保代码不丢失。
git
不一样的故事12616 小时前
将 Git 远程仓库的地址从 HTTP 修改为 SSH,
git·http·ssh
n***i9516 小时前
终于搞定了!Git分支回滚的正确操作
git
A***279517 小时前
终于搞定了!Git拉取代码时权限被拒绝
git
秦jh_17 小时前
【git】多人协作
git