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。

(这里是结束)

相关推荐
Ws_10 小时前
Git + Gerrit 第二课:diff、暂存区与撤销修改
git
snowjlz11 小时前
鸿蒙版SVN来了!!!
git·svn·版本控制
2401_8769641313 小时前
27考研余炳森概率论|喻老李良2027资料网课
windows·git·考研·svn·eclipse·github·概率论
爱搬砖的狮子14 小时前
【Git】git repo下载使用
git
cheems952717 小时前
Git基本操作
git
Irissgwe17 小时前
三、Git 文件状态管理:add、commit、status 和 diff
git
Ws_21 小时前
Git + Gerrit 第三课:分支、切换与合并
git·elasticsearch
xlq223221 天前
6.git
git
Drache_long1 天前
Git命令概述
git
console.log('npc')1 天前
修改git中commit内容
git