git 版本库之间的依赖 --submodule

 

 


自己做实验:

在gitee上建一个repo1: https://gitee.com/firstsnowflakes/testGit1 , 其会将另一个repo2: https://gitee.com/firstsnowflakes/testGit2 作为一个submodule来应用。

1)
   将repo1克隆到本地,使用master分支。然后, 执行 :

   git submodule add -b master git@gitee.com:firstsnowflakes/testGit2.git submoduleTest

   注意: submoduleTest文件夹子必须是当前目录中没有的,如果已经存在会报错,不知为啥---跟git版本有关系?

  执行后,目录中会增加一个文件.gitsubmodules,记录了submodule的路径等,另外.git/config文件也被自动更新了,自动将repo2的内容clone到了submoduleTest文件夹;

附:.gitsubmodules的内容:

[submodule "submoduleTest"]
    path = submoduleTest
    url = git@gitee.com:firstsnowflakes/testGit2.git
    branch = master

.git/config中的内容:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
[remote "origin"]
    url = git@gitee.com:firstsnowflakes/testGit1.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[submodule "submoduleTest"]
    url = git@gitee.com:firstsnowflakes/testGit2.git
    active = true

 

这时执行git status会显示以上文件发生了变化, git add , git commit一下。

 

2)在repo2中增加新的commit并push。 然后,在repo1中执行git submodule update --remote 可以将最新状态的repo2 master分支的内容拉到repo1的submodule目录下,

但是这时执行git status会提示submoudule head detached. 具体原因和解决方法后续查看官方解释:https://git-scm.com/book/en/v2/Git-Tools-Submodules  --看完这个就全ok了!再也不需要看其它!

但是,这并不影响你的使用。

还需要注意的是,执行git submodule update (不带--remote)不能从repo2中拉到最新的代码!!!!! 虽然,这个操作后,执行git status不再提示submodule里有modified,但是,它实际上是将submodule的状态退回到了你第一次执行git submodule add...的状态,坑的!

 

 


 

以下来自《git学习指南》,讲得很详细:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-09-28 12:06  JadeCicada  阅读(1262)  评论(0编辑  收藏  举报