我克隆了一个git存储库mainrepo
,它有一个子模块submodule1
。当我尝试从submodule1
获取最新更新时:
$ cd mainrepo
$ git submodule add git@bitbucket.org:myaccount/submodule1.git
$ git submodule update --remote submodule1
Usage: git submodule [--quiet] add [-b branch] [--reference <repository>] [--] <repository> [<path>]
or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: git submodule [--quiet] init [--] [<path>...]
or: git submodule [--quiet] update [--init] [-N|--no-fetch] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: git submodule [--quiet] foreach [--recursive] <command>
or: git submodule [--quiet] sync [--] [<path>...]
$ git submodule update --remote
Usage: git submodule [--quiet] add [-b branch] [--reference <repository>] [--] <repository> [<path>]
or: git submodule [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: git submodule [--quiet] init [--] [<path>...]
or: git submodule [--quiet] update [--init] [-N|--no-fetch] [--rebase] [--reference <repository>] [--merge] [--recursive] [--] [<path>...]
or: git submodule [--quiet] summary [--cached|--files] [--summary-limit <n>] [commit] [--] [<path>...]
or: git submodule [--quiet] foreach [--recursive] <command>
or: git submodule [--quiet] sync [--] [<path>...]
我确信我曾尝试以这种方式更新submodules
,文档也说这样做,但我不明白为什么它不起作用。
但是如果我直接在submodule
中进行获取和合并,它会根据需要更新到最新的存储库提交:
$ cd submodule1
$ git fetch && git merge master
为什么submodule update --remote submodule1
命令不起作用?
也许这可能会有所帮助:
$ vim mainrepo/.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@bitbucket.org:myaccount/mainrepo.git
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "local/src/utils"]
url = git@bitbucket.org:myaccount/submodule1.git
$ vim .gitmodules
[submodule "submodule1"]
path = submodule1
url = git@bitbucket.org:myaccount/submodule1.git
答案 0 :(得分:2)
我建议从git:https://git-scm.com/book/en/v2/Git-Tools-Submodules
阅读子模块的速成课程我的猜测是,因为您克隆的存储库已经有一个子模块(在repo的根目录中检查.gitmodules
!),您不应该再次git submodule add
。
克隆存储库然后运行git submodule update --recursive
就足够了!
或者,git clone --recurse-submodules
会自动为您执行此操作。