`--name` 选项无法与 `git submodule add` 命令一起使用。

41

我想添加一个不同名称的git子模块,例如:

git submodule add --name foo git@bitbucket.org:ironsand/cookbook-foo.git

我想创建一个名为foo的git子模块目录,但是仓库的名称是用cookbook-foo创建的。

很可能是我做错了什么,但我不知道具体是哪里错了。

我该如何更改git子模块目录的名称?

3个回答

87

不要混淆子模块的路径名称。你想运行

git submodule add git@bitbucket.org:ironsand/cookbook-foo.git foo/

请参考 git-submodule 手册获取更多细节,此处相关的 git-submodule 语法为:

git submodule [--name <name>] <repository> [<path>]

其中...

  • <repository>是新子模块的源代码库的 URL。
  • 如果指定了<path>,则确定子目录(超级项目根目录下的)的名称,用于接收位于<repository>上的 repo 的克隆;如果未指定,则<path>默认为该 repo 的名称。
  • <name>是子模块的名称,在.gitmodules文件中相应的子模块条目中出现;如果未指定,则<name>仅默认为<path>

以下是一个玩具示例以澄清概念:

$ cd ~/Desktop
$ mkdir test
$ cd test
$ git init
$ git submodule add --name brutus https://github.com/bradfitz/gitbrute bradfitz_bruteforce
$ ls -a
.           .git            bradfitz_bruteforce
..          .gitmodules
$ cat .gitmodules
[submodule "brutus"]
    path = bradfitz_bruteforce
    url = https://github.com/bradfitz/gitbrute

5
我,“混淆”了一下 :) - Jono

0
在我的情况下,至少@jubObs的答案不起作用。我必须在URL和路径之前添加 -- 分隔符,就像 submodule 命令帮助中所示的示例一样。
$ git submodule -h
usage: git submodule [--quiet] [--cached]
   or: git submodule [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]

例如:

git submodule add --name foo \
  -- git@bitbucket.org:ironsand/cookbook-foo.git \
  path/to/foo

供参考,我的 Git 版本是 2.30。

$ git version
git version 2.30.0

0
在最新版本的git(自1.8.5起),如果命令失败或者忘记设置选项,你可以在第二步执行git mv操作。 .submodule文件将会自动更新。
git mv cookbook-foo foo

查看这个帖子以获取有关子模块上的git mv的更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接