在一个命令中添加具有特定标记而不是分支的子模块

时间:2017-06-30 22:02:10

标签: git git-submodules

对于rails模板,我想在新的rails应用程序中添加特定标记的子模块。为了保持这个简单,我想避免进入子目录并在那里运行git命令。

git submodule add --branch v1.3.37 git@example.com:foo.git vendor/foo

我想使用它,但它不接受--branch参数的标记:

fatal: 'origin/v1.3.37' is not a commit and a branch 'v1.3.37 cannot be created from it Unable to checkout submodule 'vendor/foo'

是否有一种简单的方法可以在特定标签上添加git子模块?

2 个答案:

答案 0 :(得分:5)

我认为不可能。

这是子模块command line reference

git submodule [--quiet] add [<options>] [--] <repository> [<path>]
add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]

正如你所看到的,现在它只支持分支选项,就Git对象而言,分支和标记之间的区别在这里讨论reference

  

分支

     
    

A&#34;分支&#34;是一个积极的发展路线。最近的提交     一个分支被称为该分支的一角。

  
     

标签

     
    

指向标记或提交对象的引用。与头部,标签相反     不会因提交而改变。

  

因此,在Git团队支持子模块的SHA提交签出之前,您无法签出特定的标记。

答案 1 :(得分:0)

您可以采取一种解决方法:只需 fork 目标存储库并从上游标记创建一个新分支。

git clone git@my.example.com:foo.git /tmp/foo && cd /tmp/foo
git checkout -b release-v1 v1
git push --set-upstream origin release-v1
cd ~/workspace && git submodule add --branch release-v1 git@my.example.com:foo.git vendor/foo

但稍后您必须从新闻标签创建新分支,然后才能将其用作 git 子模块。