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吧!!

  • 相关阅读:
    MySql查询分页数据
    出现不不能引java.util.Date包的情况
    类的反射实例(servlet的抽取)
    关于C++ const 的全面总结
    教你用笔记本破解无线路由器password
    使用 HTML5 webSocket API实现即时通讯的功能
    用户研究经验分享
    我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
    用户參与记录存储的演变
    IC芯片
  • 原文地址:https://www.cnblogs.com/YangMark/p/4048296.html
Copyright © 2011-2022 走看看