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。

(这里是结束)

相关推荐
先跑起来再说1 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
承渊政道5 小时前
Linux系统学习【Linux系统的进度条实现、版本控制器git和调试器gdb介绍】
linux·开发语言·笔记·git·学习·gitee
Doro再努力5 小时前
【Linux操作系统12】Git版本控制与GDB调试:从入门到实践
linux·运维·服务器·git·vim
摇滚侠7 小时前
MAC IDEA GIT 提交区显示了几个不存在的目录
git·idea
城东8 小时前
Git使用[远程仓库远端的head比本地和提交的head旧,其他人拉不到最新代码]
git·head·远程仓库远端·比本地和提交的head旧·其他人拉不到最新代码
何中应17 小时前
使用SSH地址拉取远程仓库代码报下面的错误
git
何中应17 小时前
Git本地仓库命令补充
git
sun00770019 小时前
执行repo sync -c -d -j4以后,提交未git push的代码看不到了。要怎么恢复?
git
胖虎121 小时前
Git 一个本地仓库同时推送到两个远程仓库(详细教程)
git·多远程仓库·双远程仓库·git双远程·git备份
春日见1 天前
如何创建一个PR
运维·开发语言·windows·git·docker·容器