git submodule使用(添加子仓库,删除子仓库,更新子仓库)

git submodule使用

git submodule 帮助

git submodule [--quiet] [--cached]
git submodule [--quiet] add [<options>] [--] <repository> [<path>]
git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
git submodule [--quiet] init [--] [<path>...]
git submodule [--quiet] deinit [-f|--force] (--all|[--] <path>...)
git submodule [--quiet] update [<options>] [--] [<path>...]
git submodule [--quiet] set-branch [<options>] [--] <path>
git submodule [--quiet] set-url [--] <path> <newurl>
git submodule [--quiet] summary [<options>] [--] [<path>...]
git submodule [--quiet] foreach [--recursive] <command>
git submodule [--quiet] sync [--recursive] [--] [<path>...]
git submodule [--quiet] absorbgitdirs [--] [<path>...]

git submodule add <仓库地址> <路径>

自己的项目需要增加git子仓库,使用add命令添加到项目中

git submodule add <仓库地址> <路径>

在指定的路径下安装子仓库,没有路径,

$ git init
Initialized empty Git repository in /mnt/g/workspace/temp/gitSubTest/.git/
$ git submodule add https://gitee.com/scitechlabs/stl_utils.git ./modules/stl_utils    
Cloning into '/mnt/g/workspace/temp/testgit/modules/stl_utils'...
remote: Enumerating objects: 55, done.
remote: Counting objects: 100% (55/55), done.
remote: Compressing objects: 100% (55/55), done.
remote: Total 55 (delta 17), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (55/55), 21.44 KiB | 46.00 KiB/s, done.
$ ls modules/stl_utils 
README.md  src ==============> 在指定的目录出现中仓库的代码
$ cat .gitmodules
[submodule "modules/stl_utils"]
        path = modules/stl_utils  ==============> 主仓库目录下生成.gitmodules分别记录路径和仓库地址
        url = https://gitee.com/scitechlabs/stl_utils.git
$ cat .git/config 
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
[submodule "modules/stl_utils"]  ==============> 主仓库的config文件中出现子仓库的信息
        url = https://gitee.com/scitechlabs/stl_utils.git
        active = true
$ cat ./modules/stl_utils/.git
gitdir: ../../.git/modules/modules/stl_utils ==============> 子仓库的.git变为文件,记录子仓库的.git地址仓库的config文件中出现子仓库的信息
$ cat .git/modules/modules/stl_utils/config 
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
        worktree = ../../../../modules/stl_utils ==============> 子仓库的的config中记录worktree
[remote "origin"]
        url = https://gitee.com/scitechlabs/stl_utils.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

git submodule deinit -f

反初始化submodule,可以删除主仓库的config中子模块信息,-f 同时删除子仓库数据

$ git submodule deinit stl_utils
error: the following file has changes staged in the index:
    stl_utils
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'stl_utils' contains local modifications; use '-f' to discard them
$ git submodule deinit -f stl_utils
Cleared directory 'stl_utils'
Submodule 'stl_utils' (https://gitee.com/scitechlabs/stl_utils.git) unregistered for path 'stl_utils'
$ ls
stl_utils
$ cat ./.git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
$ cat .gitmodules 
[submodule "modules/stl_utils"]
        path = modules/stl_utils
        url = https://gitee.com/scitechlabs/stl_utils.git
$ ls ./.git/modules
stl_utils
$ cat ./.git/modules/stl_utils/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        url = https://gitee.com/scitechlabs/stl_utils.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

.gitmodules 中数据需要手工删除
.git/modules 中数据需要手工删除
modules目录需要手工删除

git submodule update --init

如果clone别人的仓库使用子仓库,使用update指定安装仓库

git submodule update --init

切换子仓库分支,提交子仓库代码等操作可以在子仓库目录中直接操作。

git submodule status

git submodule foreach

git submodule foreach git pull
所有子仓库拉取最新版本

git submodule status

$ git submodule status --recursive
 15009bd06aecbcef3fcc0de8e631a4c110791a68 doc (heads/master)
 92ae6e596c6d0e8c651fbd43c3c592019d421096 src/common (heads/arm)

修改子模块的远程路径

确实,删除子模块然后重新添加是一个更容易理解的方法。以下是具体步骤:

  1. 删除子模块

    git submodule deinit -f -- path/to/submodule
    git rm -f path/to/submodule
    rm -rf .git/modules/path/to/submodule
    
  2. 重新添加子模块

    git submodule add [ -b <branch> ] <新的子模块URL> path/to/submodule
    git submodule update --init --recursive
    
  3. 提交更改

    git add .gitmodules
    git add path/to/submodule
    git commit -m "Re-add submodule with new URL"
    git push
    

通过上述步骤,你可以简单地删除并重新添加子模块,从而更新子模块的URL。

微信号:yjkhtddx

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Git submoduleGit 的一个功能,可以将一个 Git 仓库作为另一个 Git 仓库目录进行管理。通过使用模块,我们可以在一个 Git 仓库使用另一个 Git 仓库的组件。 使用 git submodule 的步骤如下: 1. 在父项目中添加模块:使用命令 `git submodule add <模块仓库地址> <模块存放路径>` 将模块添加到父项目中。 2. 克隆模块:使用命令 `git submodule init` 初始化模块,然后使用命令 `git submodule update` 克隆模块的内容。 3. 切换到模块分支:通过 `cd <模块路径>` 进入模块目录,然后使用 `git checkout <分支名>` 切换到模块所在的特定分支。 4. 更新模块:在父项目中使用命令 `git submodule update --remote` 可以更新模块为最新的提交。 5. 提交模块修改:在父项目中修改了模块后,需要切换到模块目录,进行提交和推送操作。 使用模块的好处是可以将项目作为独立的仓库进行开发和维护,同时在父项目中方便地使用更新模块。使用模块可以实现项目的模块化和复用,提高代码的可维护性和可重用性。 需要注意的是,使用模块时需要注意模块的分支和版本控制,因为模块可能会更新,需要及时更新父项目中的模块。同时,在多人协作开发中,也需要注意在提交父项目时确保模块的修改也已经提交。 总之,使用 Git submodule 可以方便地在父项目中使用模块的组件,提高代码管理的灵活性和可重用性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值