博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git 子模块 - submodule(转)
阅读量:6907 次
发布时间:2019-06-27

本文共 1383 字,大约阅读时间需要 4 分钟。

原文地址: 

有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你 独立开发的,用于多个父项目的库。 现在问题来了:你想要把它们当做两个独立的项目,同时又想在 一个项目中使用另一个。

Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。

开始使用子模块

git submodule add remotePath [localPath]

克隆含有子模块的项目

git clone remotePathgit submodule init        # 初始化本地配置文件git submodule update    # 从该项目中抓取所有数据并检出父项目中列出的合适的提交。

在包含子模块的项目上工作

  1. 进入子模块目录中手动抓取与合并

    • 进入子模块目录
    • git fetch
    • git merger origin/master
    • 进入主仓库目录
  2. 直接在主仓库里抓取与合并子模块

    • git submodule update --remote
  3. 在子模块上工作

    当我们运行 git submodule update 从子模块仓库中抓取修改时,Git 将会获得这些改动并 更新子目录中的文件,但是会将子仓库留在一个称作 “游离的 HEAD” 的状态。 这意味着没有本 地工作分支(例如 “master”)跟踪改动。 所以你做的任何改动都不会被跟踪。

    git checkout stable                        进入子模块并检出相应的工作分支 git submodule update --remote            从上游拉取数据 git submodule update --remote --merge     从上游拉取数据并合并
  4. 发布子模块改动

    如果我们在主项目中提交并推送但并不推送子模块上的改动,其他尝试检出我们修改的人会遇到 麻烦,因为他们无法得到依赖的子模块改动。 那些改动只存在于我们本地的拷贝中。

    为了确保这不会发生,你可以让 Git 在推送到主项目前检查所有子模块是否已推送。 git push 命令接受可以设置为 check 或 on-demand 的 --recurse-submodules 参数。 如果任何提交的子模块改动没有推送那么 check 选项会直接使 push 操作失败。

    • 提交主项目时自动检测子模块是否有未提交的改动

      git push --recurse-submodules=check

    • 提交主项目时,尝试自动推送一改动的子模块

      git push --recurse-submodules=on-demand

子模块技巧

  1. 子模块遍历

有一个 foreach 子模块命令,它能在每一个子模块中运行任意命令。 如果项目中包含了大量子模块,这会非常有用。

  1. 有用的别名

你可能想为其中一些命令设置别名,因为它们可能会非常长而你又不能 设置选项作为它们的默认选项。

子模块的问题

例如在有子模块的项目中切换分支可能会造成麻烦。 如果你创建一个新分支, 在其中添加一个子模块,之后切换到没有该子模块的分支上时,你仍然会有一个还未跟踪的子模块目录。

识微见远 格物致知

转载地址:http://yxgdl.baihongyu.com/

你可能感兴趣的文章
艾伟_转载:Web网站缓存文件并发问题解决方案
查看>>
iOS LaunchScreen设置启动图片 启动页停留时间
查看>>
android137 360 双击三击事件
查看>>
PHP-002
查看>>
web接口开发与测试
查看>>
谷歌笔试题整理(一)
查看>>
IOS-KVO、KVC
查看>>
Apache服务器常规操作
查看>>
【树莓派】iptables相关配置
查看>>
Gradle
查看>>
入门基础之——flash
查看>>
leetcode - Remove Duplicates from Sorted List II
查看>>
AndroidStudio下gradle的入门介绍与使用
查看>>
ActiveMQ入门实例
查看>>
PyCharm快捷键
查看>>
item.imageInsets =
查看>>
Git 经常使用命令
查看>>
欧几里得算法与扩展欧几里得算法
查看>>
asp.net core中使用log4net
查看>>
经营操作系统的一些思路
查看>>