git子模块更新--remote不起作用

时间:2016-07-15 13:09:04

标签: git git-submodules

我克隆了一个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

1 个答案:

答案 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会自动为您执行此操作。