子模块命令

本文详细介绍了如何使用Git子模块进行项目管理,包括添加、初始化、更新子模块的方法,以及如何在包含子模块的项目中同步子模块的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子模块命令

  • cat .git/config读取配置,可以查看子模块有没有被注册

为一个项目添加子模块(http)

// 可以是远程git http地址
git submodule add ~/submd/repos/lib1.git libs/lib1

clone一个带子模块的项目(project1-b)

git clone ../repos/project1.git project1-b

// 对此项目的子模块进行检查 发现存在子模块 但是子模块文件夹内并未存在内容
git submodule
// 初始化子模块
git submodule init

// 拉取子模块
git submodule update

// 简化命令
git submodule init & update

在带子模块的项目里修改子模块然后更新子模块

project1中push之后其实就是更新了引用的commit id,然后project1-b在clone的时候获取到了submodule的commit id,然后当执行git submodule update的时候git就根据gitlink获取submodule的commit id,最后获取submodule的文件

- project1-b
	- libs
		- lib1
			- lib1-features
  1. cd libs\lib1 (当前就是libs的git)
// 其HEAD指向的hash和master指向的hash是一直的

➜ henryyan@hy-hp  /project1-b/libs/lib1  cat .git/HEAD
c22aff85be91eca442734dcb07115ffe526b13a1
➜ henryyan@hy-hp  /project1-b/libs/lib1  cat .git/refs/heads/master         c22aff85be91eca442734dcb07115ffe526b13a1
  1. 修改lib的文件内容,并提交推送lib1更新到lib1仓库
// 先切换到master分支
git checkout master

// 修改lib1-features
echo "add by developer B" >> lib1-features

// 提交更改
git commit -a -m "update lib1-features by developer B"

// 推送更改
git push

// 此时远程仓库lib已经更新
  1. 提交并推送付仓库project1-b中lib的更新

看看project1-b的状态

➜ henryyan@hy-hp  ~/submd/ws/project1-b git:(master)git status
# On branch 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)
#		libs有一个新的提交
#   modified:   libs/lib1 (new commits)
#
no changes added to commit (use "git add" and/or "git commit -a")

libs/lib1的commit id由原来的c22aff85be91eca442734dcb07115ffe526b13a1更改为36ad12d40d8a41a4a88a64add27bd57cf56c9de2

➜ henryyan@hy-hp  ~/submd/ws/project1-b git:(master)git diff
diff --git a/libs/lib1 b/libs/lib1
index c22aff8..36ad12d 160000
--- a/libs/lib1
+++ b/libs/lib1
@@ -1 +1 @@
-Subproject commit c22aff85be91eca442734dcb07115ffe526b13a1
+Subproject commit 36ad12d40d8a41a4a88a64add27bd57cf56c9de2

提交这个lib1的commit更新到父仓库

cd project1-b使用父仓库的git

git add -u
git commit -m "update libs/lib1 to lastest commit id"
git push
  1. 另外一个项目拉取projetc1的内容

cd project1

// 拉取远程仓库的更新、得到子模块的commit-id
git pull
// 根据子模块的commit-id 拉取最新的子模块内容
// 能拉取最新的子模块内容
git update submodule

修改子模块后在存在此子模块的项目中进行同步

  1. 在project2的子模块lib1中进行了修改,并推送到了lib1的远程仓库

    cd libs/lib1
    git add README
    git commit -m "add file README"
    
  2. 更新project2的子模块commit id 到远程

    git add .
    git commit -m "update lib1 to lastest commit id"
    git push
    
  3. 在project1中拉取最新的lib1

    cd libs\lib1
    
    // 第一步在project2修改lib1时是在master上修改了,这里先切到master
    git checkout master
    git pull origin master
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值