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。

(这里是结束)

相关推荐
{⌐■_■}9 小时前
【git】提交修改、回撤、回滚、Tag 操作讲解,与reset (--soft、--mixed、--hard) 的区别
大数据·git·elasticsearch
GardenTu12 小时前
初尝git自结命令大全与需要理解的地方记录
git·github
真就死难20 小时前
Git是什么
git
机械心1 天前
代码管理git详细使用教程及最佳实践路径
git
hkj88081 天前
Git 常用命令
git
dawnkylin1 天前
通过 fork 为项目做出贡献
git·github
1379003402 天前
Git 设置代理
git
xiaodunmeng2 天前
sourcetree gitee 详细使用
git
LostSpeed2 天前
git,gitea - tool - creat Gitea Empty Rep Dir
git·gitea
前端郭德纲2 天前
vscode默认终端怎么设置成git bash
git·vscode·bash