亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

git submodule的使用方法

發布時間:2020-08-21 09:33:21 來源:億速云 閱讀:217 作者:小新 欄目:開發技術

小編給大家分享一下git submodule的使用方法,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

一、背景

在平時的軟件開發過程中常常會有這樣的場景,自己負責的某個模塊會依賴其他模塊或者第三方的library。這時你自己的模塊是一個獨立的代碼倉庫,你想要實現這樣一種功能,當你從你的模塊的代碼倉庫里把代碼拉到本地來的時候,能自動的將你依賴的模塊或第三方庫都拉到指定的目錄當中去。

當然要實現這個功能的方法有很多,比如使用repo之類的工具,又比如如果你使用的是svn作為版本管理工具,那么你可以使用svn的external機制來引用第三方的project。

這里要說的是使用git作為版本管理工具的情況。

二、git submodule

其它的細枝末節就不再贅述了,咱直奔主題。

先來看具體用例:

目前有一個模塊A,其代碼倉庫的地址為:projectA.git, 它需要引用另一個模塊B, 其代碼倉庫的地址為:projectB.git。

假設模塊A的本地目錄為:projectA

希望引用模塊B為模塊A的子模塊,其在模塊A目錄下的路徑為: projectA/projectB

這里我們通過git 的submodule機制來實現。

比如在命令行里可以直接使用如下命令:

cd projectA
git submodule add projectB.git projectB

注: 這個submodule的 子目錄指定時不能以 “/”結尾, 比如上面的命令,就不能寫成 projectB/ 這個樣子。

就這么簡單的一句git命令就可以搞定了,當然這還沒完,運行完這個命令之后,在projectA目錄執行git status命令,可以看到如下的結果:

git submodule的使用方法

這時需要使用git commit命令和git push命令,將添加模塊B為模塊A的子模塊的結果push到模塊A的代碼倉庫里面去。

三、git clone包含子模塊的代碼倉庫

此時,就可以使用git clone命令來抓取模塊A的代碼倉庫,但要同時抓取到子模塊的倉庫的話,還需要一些方法:

正常的使用git clone命令,然后再使用 git submodule init 和git submodule update來獲取子模塊

git clone projectA.git
cd projectA
git submodule init
git submodule update

其運行結果如下:

git submodule的使用方法

在使用git clone命令時,加上–recurse-submodules或–recursive 這樣的遞歸參數

git clone --recursive projectA.git

其運行結果如下:

git submodule的使用方法

四、tortoisegit操作submodule

如果是使用tortoisegit的話,也可以使用圖形化界面進行submodule的相關操作,如添加submodule就選擇如下圖所示的菜單:

git submodule的使用方法

添加子模塊的界面大概就是下面這個樣子:

git submodule的使用方法

這里和上面一樣“path”一欄不能以”/”結尾。 填寫之后,點擊OK,就會在主模塊的目錄下添加對應的子模塊。

在clone時也是一樣的,它既可以只是clone,然后用上面菜單中,Submodule Update 選項來抓取子模塊的內容,也可以在clone時選擇遞歸參數,如下所示:

git submodule的使用方法

五、忽略submodule中的修改或新增文件

我們引用第三方的project,大多數情況都是想以“只讀”的方式引用,不關心第三方project抓取下來之后是不是被修改,或者是在其目錄中添加了untracked的file, 因為我們只是拉取第三方的project,而不會(往往時不能或不允許)對第三方project進行提交。

以上面的模塊A和模塊B的例子來說,如果模塊A和模塊B中都有進行修改,其結果可能就是如下這個樣子:

git submodule的使用方法

這并不是我們想要的結果。一開始的時候我的想法是使用 .gitignore 來忽略submodule的修改,但是無法做到,后來經過一番搜索,終于找到了解決良藥。在添加了submodule之后,project的目錄下回生成一個.gitmodules文件,這個文件記錄了子模塊的路徑和倉庫地址等信息,如下圖所示:

git submodule的使用方法

我們要做的就是在[submodule “projectB”]中添加一個ignore子項,這個ignore子項可以有上個可選的值,untracked, dirty和all, 它們的意思分別是:

  • untracked :忽略 在子模塊B(也就是projectB目錄)新添加的,未受版本控制內容
  • dirty : 忽略對projectB目錄下受版本控制的內容進行了修改
  • all : 同時忽略untracked和dirty

這里我們先選擇dirty(至少先保證不提交對子模塊B的任何修改),其他的可以根據具體需求來進行選擇。

添加ignore子項之后的.gitmodules文件的內容如下所示:

git submodule的使用方法

然后我們再使用git status查看,可以得到圖下結果:

git submodule的使用方法

可以看出,之前 “modified: projectB(modified content)” 已經不見了, 此時對修改后的.gitmodules文件進行commit和push, 之后在查看status或做commit時就可以忽略掉對子模塊B修改的部分了。

看完了這篇文章,相信你對git submodule的使用方法有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

库尔勒市| 喀喇沁旗| 兴安县| 天水市| 昭平县| 襄樊市| 甘德县| 商南县| 开远市| 亚东县| 丹江口市| 两当县| 南川市| 嘉祥县| 丹凤县| 玉山县| 盐山县| 新化县| 友谊县| 江油市| 太谷县| 安义县| 汉寿县| 大姚县| 永昌县| 塔河县| 汉源县| 布拖县| 云阳县| 永顺县| 沭阳县| 交城县| 辰溪县| 乐业县| 汉川市| 洪雅县| 小金县| 佳木斯市| 平山县| 比如县| 资溪县|