在開發的過程中我們的項目可能會引用其他的版本庫中的代碼, 例如公司已經累積了一套公用的函式庫, 被多個項目調用;  很顯然地, 不能把公用函式庫的文件直接放到我們開發中的項目中, 這樣不但項目的冗餘, 也增加維護的難度, 無疑是替自己找麻煩.

這時候我們就可以使用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的更多相关文章

  1. ios SourceTree中添加git项目工程文件

    1.创建远程git仓库 2.复制远程仓库地址,最好选择http的地址. 3.在自己的电脑上下载一个SourceTree,然后在自己的电脑上建立链接. 点击左上角的+号桶开始添加,弄好点击Clone 4 ...

  2. 使用git submodule管理一个需要多个分立开发或者第三方repo的项目

    在项目开发中,特别是web前端开发中,有非常多的开源第三方library,我们希望引用他们,同时也希望能够方便地保持这些第三方 开源repo的更新.另外一方面如果我们自己在开发一个网站的项目,这个项目 ...

  3. git submodule 使用过程中遇到的问题

    git submodule 使用过程中遇到的问题 资源文件 原.gitmodules文件的内容如下: [submodule "Submodules/FFmpegWrapper"] ...

  4. Git submodule 仓库中包含另外的仓库(子仓库)

    Git submodule 仓库中包含另外的仓库(子仓库) 添加 submodule 在父仓库 git 目录下: git submodule add ssh://ip/[path]/xxx.git 注 ...

  5. git submodule初用

    git submodule主要是用于针对git项目中还存在git子模块的情况.在一般情况下,我们通过git clone 获取项目的时候会把项目中的所有信息都拿到.但是,如果相关中存在git子模块那么, ...

  6. git submodule(转载)

    From:http://www.worldhello.net/2010/01/26/425.html 删除 git submodule (git 库子模组) 有两种情况会创建 git submodul ...

  7. Git submodule 特性

    当你习惯了代码的 VCS 后,基本上是离不开的. 作为一个依赖多个子项目组成的项目,要实现直观的代码逻辑结构,可以考虑使用 Git submodule 特性. 当然,如果只是单独的依赖的话,用依赖管理 ...

  8. Git subtree和Git submodule

    git submodule允许其他的仓库指定以一个commit嵌入仓库的子目录. git subtree替代git submodule命令,合并子仓库到项目中的子目录.不用像submodule那样每次 ...

  9. 实践中的Git常用指令分析

    从工作开始,一直都在使用为知笔记(作为程序员需要知道的内容很多---不需要很深入理解,一段时不使用的东西可能就会忘记).但本周一同步不同PC端时,了解到为知会在2017/1/1开始收费! 既然收费了, ...

随机推荐

  1. 国内物联网平台(8):中移物联网开放平台OneNet

    国内物联网平台(8)——中移物联网开放平台OneNet 马智 平台定位 OneNET是中移物联网有限公司搭建的开放.共赢设备云平台,为各种跨平台物联网应用.行业解决方案,提供简便的云端接入.存储.计算 ...

  2. Sharepoint2013搜索学习笔记之自定义结果源(七)

    搜索中心新建好之后在搜索结果页上会默认有所有内容,人员,对话,视频这四个结果分类,每个分类会返回指定范围的搜索结果,这里我再添加了部门日志结果分类,搜索这个分类只会返回部门日志内容类型的搜索结果,要实 ...

  3. android studio中使用recyclerview小白篇(二)

    前面一个说了怎么把这个包引用进来,这一节说怎么做一个简单的例子出来,我也是照着别人的例子写的,然后慢慢改就行了,做好的效果如下图 1.在我们的activity_main中把recyclerview填加 ...

  4. android android各种应用的许可

    android各种应用的许可 在Android的设计中,资源的访问或者网络连接,要得到这些服务都需要声明其访问权限,否则将无法正常工作.在Android中这样的权限有很多种,这里将各类访问权限一一罗列 ...

  5. 《spring 攻略》笔记1

    chapter1 spring简介 两种spring ioc容器实现类型: BeanFactory ApplicationContext 应用程序上下文 DI技巧: @Autowired(requir ...

  6. sqlite数据库文件查看

  7. 【转】C#使用Oracle.ManagedDataAccess.dll

    源地址:https://www.cnblogs.com/goldenbridge/p/7812081.html

  8. python 中文件夹的操作

    文件有两个管家属性:路径和文件名. 路径指明了文件在磁盘的位置,文件名原点的后面部分称为扩展名(后缀),它指明了文件的类型. 一:文件夹操作 Python中os 模块可以处理文件夹 1,当前工作目录 ...

  9. AF 与 PF区别

    AF 表示ADDRESS FAMILY 地址族 PF 表示PROTOCL FAMILY 协议族 Winsock2.h中#define AF_INET 0#define PF_INET AF_INET ...

  10. jQuery 遍历 - closest() 方法

    jQuery 遍历参考手册 实例 本例演示如何通过 closest() 完成事件委托.当被最接近的列表元素或其子后代元素被点击时,会切换黄色背景: $( document ).bind("c ...