加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

详解git submodule使用以及注意事项

发布时间:2020-11-16 13:11:57 所属栏目:站长百科 来源:网络整理
导读:这篇文章首要先容了详解git submodule行使以及留意事项,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣们下面跟着

  短视频,自媒体,达人种草一站处事

这篇文章首要先容了详解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 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 clone呼吁时,加上–recurse-submodules或–recursive 这样的递归参数

git clone --recursive projectA.git

其运行功效如下:

四、tortoisegit操纵submodule

假如是行使tortoisegit的话,也可以行使图形化界面举办submodule的相干操纵,如添加submodule就选择如下图所示的菜单:

添加子模块的界面或许就是下面这个样子:

这里和上面一样“path”一栏不能以”/”末了。 填写之后,点击OK,就会在主模块的目次下添加对应的子模块。

在clone时也是一样的,它既可以只是clone,然后用上面菜单中,Submodule Update 选项来抓取子模块的内容,也可以在clone时选择递归参数,如下所示:

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

我们引用第三方的project,大大都环境都是想以“只读”的方法引用,不体谅第三方project抓取下来之后是不是被修改,可能是在其目次中添加了untracked的file, 由于我们只是拉取第三方的project,而不会(每每时不能或不应承)对第三方project举办提交。

以上面的模块A和模块B的例子来说,假如模块A和模块B中都有举办修改,其功效也许就是如下这个样子:

这并不是我们想要的功效。一开始的时辰我的设法是行使 .gitignore 来忽略submodule的修改,可是无法做到,其后颠末一番搜刮,终于找到了办理良药。在添加了submodule之后,project的目次下回天生一个.gitmodules文件,这个文件记录了子模块的路径和客栈地点等信息,如下图所示:

我们要做的就是在[submodule “projectB”]中添加一个ignore子项,这个ignore子项可以有上个可选的值,untracked, dirty和all, 它们的意思别离是:

untracked :忽略 在子模块B(也就是projectB目次)新添加的,未受版本节制内容

dirty : 忽略对projectB目次下受版本节制的内容举办了修改

all : 同时忽略untracked和dirty

这里我们先选择dirty(至少先担保不提交对子模块B的任何修改),其他的可以按照详细需求来举办选择。

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

然后我们再行使git status查察,可以获得图下功效:

可以看出,之前 “modified: projectB(modified content)” 已经不见了, 此时对修改后的.gitmodules文件举办commit和push, 之后在查察status或做commit时就可以忽略掉对子模块B修改的部门了。

到此这篇关于详解git submodule行使以及留意事项的文章就先容到这了,更多相干git submodule行使内容请搜刮剧本之家早年的文章或继承赏识下面的相干文章但愿各人往后多多支持剧本之家!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读