美文网首页
Git diff/submodule 学习记录

Git diff/submodule 学习记录

作者: Mokaffee | 来源:发表于2021-02-23 20:47 被阅读0次

    资料:
    Git Gud: The Working Tree, Staging Area, and Local Repo

    理解: 工作区、暂存区、git 仓库

    • staging area
    • working area
    • repo
    工作区、暂存区、git 仓库.png

    Git 命令记录

    git diff 命令

    https://www.jianshu.com/p/80542dc3164e

    工作区 和 暂存区 对比

    git diff <filename>
    查看工作区和暂存区的差别。
    如果还没有add 到 暂存区,则查看文件自身修改前后的差别。

    git diff <branch> <filename> 指定分支,查看和该分支的区别。?

    暂存区 和 git repo 对比

    git diff --cached <filename>
    查看已经 add 到暂存区但是还没有 commit 的内容 和 最新一次 commit 时的内容差异。

    git diff --cached <commit> <filename> 指定仓库版本。?

    工作区 和 Git repo 对比

    git diff <commit> <filename>
    查看工作区和git repo 指定commit 的内容差异。
    <commit> = HEAD 时,查看工作区 和 最近一次 commit 的内容的差异。

    git repo 和 git repo 对比

    git diff <commit> <commit>
    Git repo 中任意两次 commit 之间的差别。

    git submodule 命令

    在项目里添加子模块

    git submodule add <repo url> <submodule的别名>
    如果没有给 <submodule的别名>, 默认的是repo根目录file名字

    查看项目中的submodule

    git submodule

    更新项目内 submodule

    更新项目内 submodule到最新版本
    git submodule update

    更新项目内 submodule 为远程项目的最新版本
    git submodule update --remote


    关于带有 submodule 项目的操作记录

    接下来我们将会克隆一个含有子模块的项目。

    克隆带有子模块的项目

    有两种方式:

      1. 先克隆父项目,再更新子模块
      1. 直接递归克隆整个项目

    1. 先克隆父项目,再更新子模块

    // 当你在克隆这样的项目时,默认会包含该子模块目录,但其中还没有任何文件:
    $git clone xxxx父项目
    
    // 查看 submodule
    // 如果submodule 前面有个 `-` 号,说明子模块文件还未检入(空文件夹)
    $ git submodule
    
    //你必须运行两个命令:git submodule init 用来初始化本地配置文件,
    //而 git submodule update 则从该项目中抓取所有数据并检出父项目中列出的合适的提交。
    //( init 每个项目只用在克隆父项目之后运行一次)
    $git submodule init 
    
    // 更新 submodule
    $git submodule update
    
    

    2. 直接递归克隆整个项目

    7.11 Git 工具 - 子模块

    如果给 git clone 命令传递 --recurse-submodules 选项,它就会自动初始化并更新仓库中的每一个子模块, 包括可能存在的嵌套子模块。

    git clone --recurse-submodules xxx父项目
    

    如果你已经克隆了项目但忘记了 --recurse-submodules,那么可以运行 git submodule update --initgit submodule initgit submodule update合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update --init --recursive

    删除子模块

    删除子模块比较麻烦,需要手动删除相关的文件,否则在添加子模块时有可能出现错误。
    删除子模块的步骤:

    1. 删除 submodule 文件夹
    $ git rm --cached submodule_file_name
    $ rm -rf  submodule_file_name
    
    1. 删除 .gitmodules 文件中相关的 submodule信息
    2. 删除 .git/config中相关的 submodule 信息
    3. 删除 .git 文件夹中相关的 submodule 信息
    $ rm -rf .git/modules/xxx
    

    其他文章学习

    https://www.cnblogs.com/lsgxeva/p/8540758.html

    后续更新

    1. 之前对 submodule 的理解是“以为submodule就是默认master上的 commit id”, 后来和同事聊分支部署问题,才意识到了 submodule 只是针对 commit id, 不是对应分支的。

    相关文章

      网友评论

          本文标题:Git diff/submodule 学习记录

          本文链接:https://www.haomeiwen.com/subject/yjtrfltx.html