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

Posted

技术标签:

【中文标题】添加具有特定标签的子模块而不是在一个命令中分支【英文标题】:Add submodule with specific tag not branch in one command 【发布时间】:2017-12-04 22:34:31 【问题描述】:

对于 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 子模块?

【问题讨论】:

【参考方案1】:

您可以制定一个解决方法:只需 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 子模块之前从新闻标签创建新分支。

【讨论】:

【参考方案2】:

我认为这是不可能的。

这是子模块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:

分支

“分支”是一条活跃的发展路线。最近的提交 一个分支被称为该分支的尖端。

标签

指向标签或提交对象的引用。与头部相比,标签 不会被提交更改。

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

【讨论】:

以上是关于添加具有特定标签的子模块而不是在一个命令中分支的主要内容,如果未能解决你的问题,请参考以下文章

为啥我必须删除为 UITableViewCell 添加的子视图,而不是在 UITableViewCell 的子类中?

为啥要在 NP 中分解,而不是在 P 中分解?

仅在最大日期而不是在组的其他条目中显示具有特定值的组

添加具有特定ID的文档而不覆盖现有ID

将 Excel UDF 放入 Worksheet 对象(而不是在模块中)

在不同的新标签中打开两个链接,而不是在同一个