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

這時候我們就可以使用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. javascript鼠标双击时触发事件大全

    javascript事件列表解说 事件 浏览器支持 解说 一般事件 onclick IE3.N2 鼠标点击时触发此事件 ondblclick IE4.N4 鼠标双击时触发此事件 onmousedown ...

  2. php 可变数量的参数列表

    可变数量的参数列表 PHP 在用户自定义函数中支持可变数量的参数列表.在 PHP 5.6 及以上的版本中,由 ... 语法实现:在 PHP 5.5 及更早版本中,使用函数func_num_args() ...

  3. Java Script 脚本的几种基本格式:

    1. <script>       document.Write("Hello wrrld!!!");     </script> 2. <scrip ...

  4. Spring容器管理对象和new对象

    问题:一个业务类交给spring管理,并自动注入了其他业务类作为属性,方法中通过全局属性调用其他业务类的方法.当该业务类是通过new获取的情况下,该实例的属性会是null(不存在依赖注入实例),调用方 ...

  5. 第十篇 requests模块

    1.安装requests 要安装requests,在终端中输入以下命令即可安装: pip3 install requests 2.发送请求 使用requests发送请求首先需要导入requests模块 ...

  6. SDUT OJ 3403 数据结构实验之排序六:希尔排序

    数据结构实验之排序六:希尔排序 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descrip ...

  7. ThinkCMF Foreach标签

    foreach标签类似与volist标签,只是更加简单,没有太多额外的属性,例如: <foreach name="list" item="vo"> ...

  8. B. Div Times Mod Round #528 (Div. 2)【简单数学】

    一.题面 题目链接 二.分析 一个简单的数学题目,这里首先要把x分解了看 $x = kd + c$ 这样原问题中的n就变成了 $n = dc$ 上面这个式子中,c因为是x除k取余得到的,那么可以肯定 ...

  9. bzoj1934 Vote 善意的投票 最小割(最大匹配)

    题目传送门 题目大意:很多小朋友,每个小朋友都有自己的立场,赞成或者反对,如果投了和自己立场不同的票会得到一个能量.又有很多朋友关系,如果一个人和他的一个朋友投的票不同,也会得到一个能量,现在问,通过 ...

  10. Codeforces Round #462 (Div. 2), problem: (C) A Twisty Movement (求可以转一次区间的不递增子序列元素只有1,2)

    题目意思: 给长度为n(n<=2000)的数字串,数字只能为1或者2,可以将其中一段区间[l,r]翻转,求翻转后的最长非递减子序列长度. 题解:求出1的前缀和,2的后缀和,以及区间[i,j]的最 ...