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 …” 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一个含有子项目的功臣
1、 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.
这是进入到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 …” to update what will be committed)
(use “git checkout – …” 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

 

本文转载自:https://blog.csdn.net/qq_41163331/article/details/81672836

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
更新git子项目,你可以使用以下命令: 1. 首先,同步子模块的代码: `git submodule sync` [1] 2. 然后,使用以下命令来初始化和更新子模块的代码: - `git submodule update --init` 用于初始化子模块的版本 [1][2] - `git submodule update --remote` 用于更新子模块到最新版本 [2] 3. 如果你在父项目中做了一些更改并想要提交子模块的新版本,你可以执行以下步骤: - 使用 `git add` 命令将子模块所在文件夹添加到暂存区 [2] - 使用 `git commit -m "说明信息"` 命令提交更改 [2] - 最后,使用 `git push` 命令将更改推送到远程仓库 [2] 综上所述,这些命令可以帮助你更新git子项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [git-github 子模块仓库更新git submodule)/gitsubmodule子模块的添加、使用和删除](https://blog.csdn.net/inthat/article/details/108416238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [git子模块的修改和更新操作](https://blog.csdn.net/qq_28087491/article/details/122134008)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值