zoukankan      html  css  js  c++  java
  • 在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路徑下, 成功訊息如下圖,

    2014-10-24_1202

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


    2014-10-24_1224

    接下來Commit再Push就好了.

    其實我們可以從上圖的libs/smlibA的檔案內容看出來, 在smMain的repository就只是記錄subproject 的commit id 而已.

     

    3. Submodule更新

    當發現smLibA更新時, 如何在smMain也進行更新呢??

    首先我先更新一下smLibA,

    2014-10-24_1357

     

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

    2014-10-24_1359

     

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

     

    2014-10-24_1205

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

    2014-10-24_1411

    最後別忘了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)自己管理自己修改.

    2014-10-24_1424

     

    接著commit+push, 別以為這樣就結束了, 我們還要去確定smMain的subproject commit有沒有被修改, 要不然

    下次Pull下來的時候我們submodule就不是我們修改過的!!

    2014-10-24_1446

    最後就Commit+Push吧!!

  • 相关阅读:
    shell getopt getopts获取参数
    apache+svn+ladp认证
    SVN 迁移项目分支
    iptables 优先级
    很实用的一篇HTTP状态码
    套路还在——矩阵计算估值
    CU上看到的一个简单的算法帖子
    linux下服务端实现公网数据转发
    c++接口实现与分离(转载)
    c++继承概念
  • 原文地址:https://www.cnblogs.com/YangMark/p/4048296.html
Copyright © 2011-2022 走看看