当前位置: 首页 > article >正文

git子模块--常见操作

克隆仓库

标准化克隆流程
  • 基本命令
    git clone <父仓库远程URL> [本地文件名]
    cd <本地仓库名>
    git submodule init   # 初始化子模块配置
    git submodule update # 拉取子模块内容
    
一次性完成克隆和初始化流程
  • 基本命令
    git clone --recurse-submodules <父仓库远程URL> [本地文件名]
    
其他克隆流程
  • 基本命令
    git clone <远程仓库URL> [本地文件名]
    cd <本地仓库名>
    git submodule update --init --recursive
    

添加子模块配置

标准化添加流程
  • 添加仓库命令
    git submodule add <子目录远程仓库URL> [子模块名]
    # 例:
    git submodule add $(cd blog && git remote get-url origin) blog # 将blog这个模块作为子模块添加到当前git仓库中;使用 git remote get-url <本地仓库名>
    
  • 成功添加后的表现
    • 生产或修改.gitmodules文件,若已有此文件,则直接写入新增的子模块配置,否则新建一个名为.gitmodules的文件并写入第一关配置
    • 提交时,子模块以特殊模式(160000)记录,表示其指向某个具体提交而非普通文件。

移除子模块配置

标准化写在流程
  • 命令行卸载子模块
    git submodule deinit <子模块的相对路径> # 在.git/config 和 .gitsubmodule中移除配置
    # 例:
    git submodule deinit "blog"
    
  • 删除子模块并暂存变更
    git rm <子模的相对块路径>
    
  • 清理残留文件:彻底删除子模块的Git缓存
    rm -rf .git/modules/<子模块名称>
    
  • 提交变更

修改子模块配置

更新子模块路径以及名称
  • 使用命令移动或重命名子模块目录
    git mv old/path new/path # 将旧的路由更名为新的路由
    
    执行完毕后.gitmodules中的路由配置信息会自动更新
    git config -f .gitmodules submodule.<submodule-neme>.path new/path # 如果没有自动更新可使用此命令更新,或手动编辑 .gitmodules 文件
    
  • 使用文件编辑器方式更新子模块名称
    vim .gitmodules # 使用任何编辑方式均可
    
    修改[submodule "<子模块名>"]中的配置
    [submodule "old-name"]  => [submodule "new-name"] # 将名称配置修改为新的名称(最好与路径字符串统一)
    path = <new/path>
    url = <URL保持不变>
    
  • 在其他地方使用最新的仓库
    git pull # 拉取最新内容,修改后的路径会以一个全新的文件夹的方式新增在这里
    rm -rf old/path # 移除掉以及被淘汰的旧路径
    git submodule update # 更新子模块内容,如果此命令无效可先输入 git submoduel init
    cd new/path
    git switch <目标分支> # 新克隆的子模块的分支处于游离状态,所以需呀切换到有效分支在做操作
    
更新子模块远程地址
  • 使用命令更新子模块路径
    git config -f .gitmodules submodule.<submodule-name>.url <new-url>
    
    自动更新.gitmodules文件中的呢日欧能够,或使用文本编辑系做如下修改
    [submodule "submodule-name"]
    path = <路径保持不变>
    url = <old-url> => url = <new-url> # 将URL配置修改为新的URL
    
  • 使用命令更新子模块
    git submodule update --remote
    
  • 在其他地方使用最新的仓库
    git pull # 拉取最新内容,修改后的路径会以一个全新的文件夹的方式新增在这里
    git submodule update # 更新子模块内容,如果此命令无效可先输入 git submoduel init
    
更新子模块内容,以及同步父模块
  • 从本地更新到远程
    cd path
    git add .
    git commit -m "<提交信息>"
    git pull [仓库名称] [目标分支] # 提交之前拉取一次最新版的远程仓库,防止提交冲突
    git push [仓库名称] [目标分支]
    cd <父仓库的根目录>
    git commit -am "更新子模块"
    git pull
    git push
    
  • 从远程更新到本地
    cd path
    git switch <分支名称>
    git pull [仓库名称] [目标分支]
    git submodule update --remote [--init] [--recursive] # 远程指令(必填)、初始化指令(选填)、递归指令(选填)
    
http://www.lryc.cn/news/2386063.html

相关文章:

  • 解决SQL Server SQL语句性能问题(9)——创建和更新统计对象
  • 数据被泄露了怎么办?
  • 绩效管理缺乏数据支持,如何提高客观性?
  • unity控制相机围绕物体旋转移动
  • 线性代数:AI大模型的数学基石
  • 【C/C++】从零开始掌握Kafka
  • 02_redis分布式锁原理
  • 简单血条于小怪攻击模板
  • Win11 系统登入时绑定微软邮箱导致用户名欠缺
  • 代码随想录算法训练营第四十六四十七天
  • 华硕FL8000U加装16G+32G=48G内存条
  • 前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析
  • java高级 -Junit单元测试
  • 在 UVM验证环境中,验证 Out-of-Order或 Interleaving机制
  • V9数据库替换授权
  • 勇闯Chromium—— Chromium的多进程架构
  • Go语言中常量的命名规则详解
  • 软件质量保证与测试实验
  • 历年华东师范大学保研上机真题
  • 【C++】什么是静态库?什么是动态库?
  • 项目阅读:Instruction Defense
  • springboot中拦截器配置使用
  • 用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!
  • 在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化
  • day36 python神经网络训练
  • k8s部署ELK补充篇:kubernetes-event-exporter收集Kubernetes集群中的事件
  • 【Excel VBA 】窗体控件分类
  • C++性能相关的部分内容
  • Spring Boot 项目中常用的 ORM 框架 (JPA/Hibernate) 在性能方面有哪些需要注意的点?
  • 基于大模型的大肠癌全流程预测与诊疗方案研究报告