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学习指南》,讲得很详细: