欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解git submodule使用以及注意事項(xiàng)

 更新時(shí)間:2020年08月20日 11:42:31   作者:玄道公子  
這篇文章主要介紹了詳解git submodule使用以及注意事項(xiàng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、背景

在平時(shí)的軟件開(kāi)發(fā)過(guò)程中常常會(huì)有這樣的場(chǎng)景,自己負(fù)責(zé)的某個(gè)模塊會(huì)依賴(lài)其他模塊或者第三方的library。這時(shí)你自己的模塊是一個(gè)獨(dú)立的代碼倉(cāng)庫(kù),你想要實(shí)現(xiàn)這樣一種功能,當(dāng)你從你的模塊的代碼倉(cāng)庫(kù)里把代碼拉到本地來(lái)的時(shí)候,能自動(dòng)的將你依賴(lài)的模塊或第三方庫(kù)都拉到指定的目錄當(dāng)中去。

當(dāng)然要實(shí)現(xiàn)這個(gè)功能的方法有很多,比如使用repo之類(lèi)的工具,又比如如果你使用的是svn作為版本管理工具,那么你可以使用svn的external機(jī)制來(lái)引用第三方的project。

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

二、git submodule

其它的細(xì)枝末節(jié)就不再贅述了,咱直奔主題。

先來(lái)看具體用例:

目前有一個(gè)模塊A,其代碼倉(cāng)庫(kù)的地址為:projectA.git, 它需要引用另一個(gè)模塊B, 其代碼倉(cāng)庫(kù)的地址為:projectB.git。

假設(shè)模塊A的本地目錄為:projectA

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

這里我們通過(guò)git 的submodule機(jī)制來(lái)實(shí)現(xiàn)。

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

cd projectA
git submodule add projectB.git projectB

注: 這個(gè)submodule的 子目錄指定時(shí)不能以 “/”結(jié)尾, 比如上面的命令,就不能寫(xiě)成 projectB/ 這個(gè)樣子。

就這么簡(jiǎn)單的一句git命令就可以搞定了,當(dāng)然這還沒(méi)完,運(yùn)行完這個(gè)命令之后,在projectA目錄執(zhí)行g(shù)it status命令,可以看到如下的結(jié)果:


這時(shí)需要使用git commit命令和git push命令,將添加模塊B為模塊A的子模塊的結(jié)果push到模塊A的代碼倉(cāng)庫(kù)里面去。

三、git clone包含子模塊的代碼倉(cāng)庫(kù)

此時(shí),就可以使用git clone命令來(lái)抓取模塊A的代碼倉(cāng)庫(kù),但要同時(shí)抓取到子模塊的倉(cāng)庫(kù)的話,還需要一些方法:

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

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

其運(yùn)行結(jié)果如下:


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

git clone --recursive projectA.git

其運(yùn)行結(jié)果如下:


四、tortoisegit操作submodule

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


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


這里和上面一樣“path”一欄不能以”/”結(jié)尾。 填寫(xiě)之后,點(diǎn)擊OK,就會(huì)在主模塊的目錄下添加對(duì)應(yīng)的子模塊。

在clone時(shí)也是一樣的,它既可以只是clone,然后用上面菜單中,Submodule Update 選項(xiàng)來(lái)抓取子模塊的內(nèi)容,也可以在clone時(shí)選擇遞歸參數(shù),如下所示:


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

我們引用第三方的project,大多數(shù)情況都是想以“只讀”的方式引用,不關(guān)心第三方project抓取下來(lái)之后是不是被修改,或者是在其目錄中添加了untracked的file, 因?yàn)槲覀冎皇抢〉谌降膒roject,而不會(huì)(往往時(shí)不能或不允許)對(duì)第三方project進(jìn)行提交。

以上面的模塊A和模塊B的例子來(lái)說(shuō),如果模塊A和模塊B中都有進(jìn)行修改,其結(jié)果可能就是如下這個(gè)樣子:


這并不是我們想要的結(jié)果。一開(kāi)始的時(shí)候我的想法是使用 .gitignore 來(lái)忽略submodule的修改,但是無(wú)法做到,后來(lái)經(jīng)過(guò)一番搜索,終于找到了解決良藥。在添加了submodule之后,project的目錄下回生成一個(gè).gitmodules文件,這個(gè)文件記錄了子模塊的路徑和倉(cāng)庫(kù)地址等信息,如下圖所示:


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

  • untracked :忽略 在子模塊B(也就是projectB目錄)新添加的,未受版本控制內(nèi)容
  • dirty : 忽略對(duì)projectB目錄下受版本控制的內(nèi)容進(jìn)行了修改
  • all : 同時(shí)忽略u(píng)ntracked和dirty

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

添加ignore子項(xiàng)之后的.gitmodules文件的內(nèi)容如下所示:


然后我們?cè)偈褂胓it status查看,可以得到圖下結(jié)果:


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

到此這篇關(guān)于詳解git submodule使用以及注意事項(xiàng)的文章就介紹到這了,更多相關(guān)git submodule使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 提示“處理URL時(shí)服務(wù)器出錯(cuò)”和“HTTP 500錯(cuò)誤“的解決方法

    提示“處理URL時(shí)服務(wù)器出錯(cuò)”和“HTTP 500錯(cuò)誤“的解決方法

    關(guān)于提示“處理URL時(shí)服務(wù)器出錯(cuò)”和“HTTP 500錯(cuò)誤“的解決方法,需要的朋友可以參考下。
    2009-11-11
  • SVN與Git版本控制的優(yōu)缺點(diǎn)差異全面分析

    SVN與Git版本控制的優(yōu)缺點(diǎn)差異全面分析

    這篇文章主要為大家介紹了SVN與Git版本控制的優(yōu)缺點(diǎn)差異全面分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Hadoop分布式集群的搭建的方法步驟

    Hadoop分布式集群的搭建的方法步驟

    這篇文章主要介紹了Hadoop分布式集群的搭建的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 遠(yuǎn)程過(guò)程調(diào)用RPC基本概念及實(shí)現(xiàn)原理

    遠(yuǎn)程過(guò)程調(diào)用RPC基本概念及實(shí)現(xiàn)原理

    這篇文章介紹了遠(yuǎn)程過(guò)程調(diào)用RPC基本概念及實(shí)現(xiàn)原理,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01
  • Hive?判斷某個(gè)字段長(zhǎng)度的示例代碼

    Hive?判斷某個(gè)字段長(zhǎng)度的示例代碼

    hive是基于Hadoop的一個(gè)數(shù)據(jù)倉(cāng)庫(kù)工具,用來(lái)進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲(chǔ)、查詢(xún)和分析存儲(chǔ)在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制,這篇文章主要介紹了Hive?判斷某個(gè)字段長(zhǎng)度,需要的朋友可以參考下
    2024-08-08
  • GitHub Eclipse配置使用教程詳解

    GitHub Eclipse配置使用教程詳解

    本文主要介紹GitHub Eclipse,這里對(duì)Eclipse 使用GitHub的教程,圖文并茂詳細(xì)說(shuō)明如何操作,有需要的小伙伴可以參考下
    2016-09-09
  • 深入探究ChatGPT的工作原理

    深入探究ChatGPT的工作原理

    這篇文章主要探討了ChatGPT的工作原理,ChatGPT是基于OpenAI開(kāi)發(fā)的GPT-4架構(gòu)的大型語(yǔ)言模型,文中圖文介紹的非常詳細(xì),感興趣的同學(xué)跟著小編一起來(lái)學(xué)習(xí)吧
    2023-06-06
  • svn 常用命令集合

    svn 常用命令集合

    SVN是subversion的縮寫(xiě),是一個(gè)開(kāi)放源代碼的版本控制系統(tǒng),通過(guò)采用分支管理系統(tǒng)的高效管理,簡(jiǎn)而言之就是用于多個(gè)人共同開(kāi)發(fā)同一個(gè)項(xiàng)目,實(shí)現(xiàn)共享資源,實(shí)現(xiàn)最終集中式的管理
    2020-07-07
  • CSDN 博客的代碼高亮問(wèn)題自己修復(fù)

    CSDN 博客的代碼高亮問(wèn)題自己修復(fù)

    這幾天 CSDN 博客的代碼高亮功能突然不行了,而且論壇上有人提出 BUG,沒(méi)有得到回應(yīng)。
    2009-05-05
  • 可能是最通俗的一篇介紹markdown的文章

    可能是最通俗的一篇介紹markdown的文章

    這些日子一直在簡(jiǎn)書(shū)上使用markdown寫(xiě)作,已經(jīng)漸漸的癡迷于這種簡(jiǎn)潔純粹的寫(xiě)作方式了。不過(guò)就我逐漸入門(mén)markdown的寫(xiě)作過(guò)程來(lái)看,目前我看到的各種介紹markdown寫(xiě)作方式的文章都還略顯極客,對(duì)于大多數(shù)像我一樣沒(méi)有基礎(chǔ)的普通人來(lái)說(shuō),可能內(nèi)容上的可接受性沒(méi)有那么強(qiáng)
    2016-08-08

最新評(píng)論