git submodule 添加,更新与删除

git submodule 是一个很好的多项目使用共同类库的工具,它允许类库项目作为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己独立的commit、push、pull。而父项目以submodule的形式包含子项目,父项目可以指定子项目header、父项目中的提交信息包含submodule信息,再clone父项目的时候可以把Submodule初始化,使用方法如下:
一、如何在主工程中添加submodule
1、进入到主工程的目录、执行如下命令
在主工程中添加一个submodule的

$ git submodule add https://gitee.com/ddonggua/submoudle.git
Cloning into 'D:/gitproject/Test/submoudle'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.

默认情况下、子模块会将子项目放到一个与仓库同名的目录中
如果这是执行git status,你会注意到几个东西

Your branch is up to date with 'origin/master'.

Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

new file: .gitmodules
new file: submoudle

.gitmodules该文件中保存了子项目URL和已经拉取的本地目录之间的映射

$ cat .gitmodules
[submodule "submoudle"]
path = submoudle
url = https://gitee.com/ddonggua/submoudle.git

如果有多个文件,该文件有多条记录

2、git add *
3、git commit -m "directions"

4、将本地提交更新到主工程的远程仓库
这样主工程就把对submodule的依赖关系提交到远程仓库了

二、克隆含有子模块的项目
接下来我们我们会clone一个含有子项目的功臣

1git clone https://gitee.com/ddonggua/Test2.git
Cloning into 'Test2'...
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 85 (delta 9), reused 0 (delta 0)
Unpacking objects: 100% (85/85), done.

这是进入到Test2目录发现

$ git clone https://gitee.com/ddonggua/Test2.git
Cloning into 'Test2'...
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 85 (delta 9), reused 0 (delta 0)
Unpacking objects: 100% (85/85), done.

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd
$ cd Test2/

工程Test2包含子项目的submodule目录、但是你会发现submodule是空的

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2 (master)
$ cd submoudle

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2/submoudle (master)
$ ls

这时必须执行submodule的初始化:git submodule init和git submodule update 则从子项目中抓取所有数据

$ git submodule init
Submodule 'submoudle' (https://gitee.com/ddonggua/submoudle.git) registered for path './'
Submodule 'submoudle2' (https://gitee.com/ddonggua/submoudle2.git) registered for path '../submoudle2'

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2/submoudle (master)

$ git submodule update

Cloning into 'D:/gitproject/ddddd/Test2/submoudle'...
Cloning into 'D:/gitproject/ddddd/Test2/submoudle2'...
Submodule path './': checked out 'd49ee61ee18b5fa794dd4f71c3428bf4876921c3'
Submodule path '../submoudle2': checked out '20387903799b25efb41d8d3af97a08a8b067051f'

这时就讲submodule的工程更新到本地了
三、subm子仓库更新
主工程依赖的字仓库更新了,主工程如何更新
1、更新主仓库
2、git submodule update --remote
这样会将子仓库的更新拉取下来
如果远程仓库有跟新

$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: submoudle (new commits)

no changes added to commit (use "git add" and/or "git commit -a")

在你的主工程下面会看见如下变更,这时,如果将此变更提交到主仓库的远程服务器
其他的开发人员执行update 之后就会将submoudle的更新拉取到本地
四、删除submoudle
git 并不支持直接删除Submodule需要手动删除对应的文件:
cd mainproject git rm --cached submodule rm -rf submodule 以上将submodule文件删除
删除.gitmodules中对应的submodule的信息,如下红色部分所示

$ cat .gitmodules
[submodule "submoudle"]
path = submoudle
url = https://gitee.com/ddonggua/submoudle.git
[submodule "submoudle2"]
path = submoudle2
url = https://gitee.com/ddonggua/submoudle2.git

更改git的配置文件config: vim .git/config
可以看到Submodule的配置信息:

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/ddonggua/Test2.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "submoudle"]
active = true
url = https://gitee.com/ddonggua/submoudle.git
[submodule "submoudle2"]
active = true
url = https://gitee.com/ddonggua/submoudle2.git

删除submodule相关的内容,
这是还未将submodule的信息清空,仍然需要将 modules目录下的submoudle删除
这样就彻底将submodule的信息删除了,然后提交到远程仓库,over

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值