Git - Submodule 使用简单教程

  最近在项目中使用了 Git Submodule 的功能,好处是如果是自己开发的封装库,比较方便调试,push 时可以同时上传项目和库的修改,别人通过主仓库地址下载工程的时候速度也会快上一些。
  Git Submodule 的使用可以通过终端命令来操作(Git Submoudle 使用完整教程),或者通过 Git 第三方可视化客户端直接操作。本文展示的是通过 Git 第三方客户端 Sourcetree 来实现这个功能的。   

一、通过 Sourcetree 使用 Git Submodule

1.首先下载一个你想要添加 Git Submodule 功能的主仓库。
这里以我用来学习的仓库为例子

  
2.在下载好的仓库左侧菜单栏,右键点击 SUMODULES,在弹出的菜单中选中“Add Sumodelues”

3.在弹出的菜单中填写远程仓库地址,和本地仓库地址
这里我填的远程仓库地址是一个第三方库 AFNetworking,大家可以根据自己的实际需求填写自己私有仓库地址或者其他仓库地址。
需要注意的是,Git Submodule 的文件夹地址的路径最好是在主工程文件路径的子目录底下,比如:

1
2
master path:~/User/xxx/主工程文件夹
Submodule path:~/User/xxx/主工程文件夹/Submodule 文件夹


点击 OK 就可以随意使用了。

后面如果需要 push/pull Submodule 仓库,更新方式也和在 sourcetree 中正常使用其他工程的流程是一样的。

4.切换分支和节点
如果需要指定 Submodule 固定的版本或分支,也很简单。
双击左侧菜单 SUMODULES 下我们添加的子仓库,仍以上面 AFNetworking 为例子:

在弹出的窗口可以看到很多很多 Tag 和分支,按自己需求手动点击切换即可。

5.删除子模块

操作也很简单,右键点击左侧菜单 SUMODULES 下我们添加的子仓库,在弹出的菜单中选择“删除”,然后点击确认“即可”

Sourcetree 会帮我们完成剩下的事情:

二、其他说明

  1. 实际开发中建议子仓库权限除管理员和子仓库维护人员以外设置为 reporter 权限(即可以克隆代码,不能提交)。
  2. 当子仓库有更新时,需要通知主仓库底下所有开发人员手动更新。

以下测试结果为上述结论提供依据:
1) 当子仓库为 reporter 权限的开发人员提交子仓库修改。其他开发人员会在主仓库中会收到子仓库的 commit 提交,但实际代码并无改变。
2) 当子仓库为 Developer 权限以上的开发人员提交代码更新时。其他开发人员会在主仓库收到子仓库的更新提醒,但需要手动 pull 到本地,代码才会发生变化。
3) 当有两个开发人员分别在子仓库中使用了不同分支或节点,并把使用的设置提交了修改。其他开发人员会在主仓库中会收到子仓库的 commit 提交,但实际代码并无改变。