在SourceTree中使用Git submodule
在開發的過程中我們的項目可能會引用其他的版本庫中的代碼, 例如公司已經累積了一套公用的函式庫, 被多個項目調用; 很顯然地, 不能把公用函式庫的文件直接放到我們開發中的項目中, 這樣不但項目的冗餘, 也增加維護的難度, 無疑是替自己找麻煩.
這時候我們就可以使用Git中submodule功能, 來管理我們的子模版, 在這裡我們配合使用GUI SourceTree(以下就簡稱ST吧), 以下就進入正文囉......
1. 準備工作
首先我們先建立兩個Repository分別叫smMain以及smLibA, 並把它們push到Git Server(ex: github, bitbucket…etc.), 在這裡就不多說了.
bitbucket
smMain: https://bitbucket.org/youngce/smmain
smLibA: https://bitbucket.org/youngce/smliba
2. 加入Submodule
在{path}/smMain中使用git submodule add命令添加submodule
git submodule add https://youngce@bitbucket.org/youngce/smliba.git libs/smlibA
libs/smlibA表示將子模塊clone到{path}/smMain/libs/smlibA路徑下, 成功訊息如下圖,

在smMain資料夾中可以發現多一個libs資料夾了, 在ST也出現了uncommitted changes以及submodules了

接下來Commit再Push就好了.
其實我們可以從上圖的libs/smlibA的檔案內容看出來, 在smMain的repository就只是記錄subproject 的commit id 而已.
3. Submodule更新
當發現smLibA更新時, 如何在smMain也進行更新呢??
首先我先更新一下smLibA,

點擊smMain的Tag, 然後點開Submodules, 在smLaibA上點擊兩下

這時會開啟一個名為smLibA的新Tag, 這個smLibA指的smMain下的smLibA, 接下來就按下Pull做更新了

回到smMain會發現新的uncommitted, libs/smLibA中的subproject commit已經被修改為最新的commit id了

最後別忘了commit+push就完成了.
4. Submodule修改
在開發的過程可能會解決一些子項目的Bug或增加函式, 那如何做這樣的修改並更新到子項目的repository呢??
在這裡, 將由smMain中修改smLibA, 最後再push到真正的smLibA的repository.
就直接由smMain資料夾中對libA.txt做修改吧!! 在修改完後你會發現ST中smMain並沒有出現uncommitted,
那剛剛的修改是跑去哪裡了呢?? 開啟submodule的smLibA看看吧!! 其實你可以想像submodule是存在於
git repository中的repository(submodule), git repository只記錄目前repository(submodule), 是對應到哪個
commit id, 而repository(submodule)自己管理自己修改.

接著commit+push, 別以為這樣就結束了, 我們還要去確定smMain的subproject commit有沒有被修改, 要不然
下次Pull下來的時候我們submodule就不是我們修改過的!!

最後就Commit+Push吧!!
在SourceTree中使用Git submodule的更多相关文章
- ios SourceTree中添加git项目工程文件
1.创建远程git仓库 2.复制远程仓库地址,最好选择http的地址. 3.在自己的电脑上下载一个SourceTree,然后在自己的电脑上建立链接. 点击左上角的+号桶开始添加,弄好点击Clone 4 ...
- 使用git submodule管理一个需要多个分立开发或者第三方repo的项目
在项目开发中,特别是web前端开发中,有非常多的开源第三方library,我们希望引用他们,同时也希望能够方便地保持这些第三方 开源repo的更新.另外一方面如果我们自己在开发一个网站的项目,这个项目 ...
- git submodule 使用过程中遇到的问题
git submodule 使用过程中遇到的问题 资源文件 原.gitmodules文件的内容如下: [submodule "Submodules/FFmpegWrapper"] ...
- Git submodule 仓库中包含另外的仓库(子仓库)
Git submodule 仓库中包含另外的仓库(子仓库) 添加 submodule 在父仓库 git 目录下: git submodule add ssh://ip/[path]/xxx.git 注 ...
- git submodule初用
git submodule主要是用于针对git项目中还存在git子模块的情况.在一般情况下,我们通过git clone 获取项目的时候会把项目中的所有信息都拿到.但是,如果相关中存在git子模块那么, ...
- git submodule(转载)
From:http://www.worldhello.net/2010/01/26/425.html 删除 git submodule (git 库子模组) 有两种情况会创建 git submodul ...
- Git submodule 特性
当你习惯了代码的 VCS 后,基本上是离不开的. 作为一个依赖多个子项目组成的项目,要实现直观的代码逻辑结构,可以考虑使用 Git submodule 特性. 当然,如果只是单独的依赖的话,用依赖管理 ...
- Git subtree和Git submodule
git submodule允许其他的仓库指定以一个commit嵌入仓库的子目录. git subtree替代git submodule命令,合并子仓库到项目中的子目录.不用像submodule那样每次 ...
- 实践中的Git常用指令分析
从工作开始,一直都在使用为知笔记(作为程序员需要知道的内容很多---不需要很深入理解,一段时不使用的东西可能就会忘记).但本周一同步不同PC端时,了解到为知会在2017/1/1开始收费! 既然收费了, ...
随机推荐
- 国内物联网平台(8):中移物联网开放平台OneNet
国内物联网平台(8)——中移物联网开放平台OneNet 马智 平台定位 OneNET是中移物联网有限公司搭建的开放.共赢设备云平台,为各种跨平台物联网应用.行业解决方案,提供简便的云端接入.存储.计算 ...
- Sharepoint2013搜索学习笔记之自定义结果源(七)
搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...
- android studio中使用recyclerview小白篇(二)
前面一个说了怎么把这个包引用进来,这一节说怎么做一个简单的例子出来,我也是照着别人的例子写的,然后慢慢改就行了,做好的效果如下图 1.在我们的activity_main中把recyclerview填加 ...
- android android各种应用的许可
android各种应用的许可 在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列 ...
- 《spring 攻略》笔记1
chapter1 spring简介 两种spring ioc容器实现类型: BeanFactory ApplicationContext 应用程序上下文 DI技巧: @Autowired(requir ...
- sqlite数据库文件查看
- 【转】C#使用Oracle.ManagedDataAccess.dll
源地址:https://www.cnblogs.com/goldenbridge/p/7812081.html
- python 中文件夹的操作
文件有两个管家属性:路径和文件名. 路径指明了文件在磁盘的位置,文件名原点的后面部分称为扩展名(后缀),它指明了文件的类型. 一:文件夹操作 Python中os 模块可以处理文件夹 1,当前工作目录 ...
- AF 与 PF区别
AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCL FAMILY 协议族 Winsock2.h中#define AF_INET 0#define PF_INET AF_INET ...
- jQuery 遍历 - closest() 方法
jQuery 遍历参考手册 实例 本例演示如何通过 closest() 完成事件委托.当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景: $( document ).bind("c ...