首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用git子树推送标签?

如何使用git子树推送标签?
EN

Stack Overflow用户
提问于 2013-07-29 02:33:32
回答 3查看 2.6K关注 0票数 4

我已经成功地用git-subtree创建了一个由几个子存储库组成的大型存储库,假设主存储库包含Slave1和Slave2。

主机/从机1/从机2/

现在我想在Master上添加标签,并将每个标签推送到slave repos,我该怎么做呢?

如果我"git push Slave2 --tags“,整个标签都会被传输,但我只想传输与Slave2相关的文件。

你可以使用git-subsplit来实现它,但说实话,它有点不切实际,而且速度很慢。

有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2013-08-06 00:30:47

正如在"How to make “git push” include tags within a branch?“中提到的,git 1.8.3 (2013年5月)现在包含一个git push --follow-tags选项:

推送所有在没有此选项的情况下将被推送的refs,也推送refs/tags中的注释标记,这些标记从遥控器中缺失,但指向从被推送的refs可访问的commit-ish。

现在,请记住tag applies to the full repository (not a subdirectory),但有一个想法是:

  • master处于稳定状态时将master合并到‘Slave1’中,并在其中放置标记。当您具有稳定状态<代码>D15时,
  • master合并到'slave2_br‘中,并在其中放置标记。<代码>H216<代码>F217

然后:

代码语言:javascript
复制
git push --follow_tags slave1 slave1_br
git push --follow_tags slave2 slave2_br

这是我知道的不推送所有标签的唯一方法,但只有一个可以从你推送的分支到达。

我知道这涉及多个分支(master),但它可能是git-subsplit的替代方案。

票数 4
EN

Stack Overflow用户

发布于 2015-11-19 23:52:21

我有一个使用git子树拆分的解决方案。

所有操作都在主存储库上完成,您可以使用主存储库的任何分支。

首先在主存储库上创建标签

代码语言:javascript
复制
git tag -a 1.0.0 -m "the tag 1.0.0"

为Slave1创建标签

签出标签

代码语言:javascript
复制
git checkout 1.0.0

为此标记创建一个仅包含slave1的分支

代码语言:javascript
复制
git subtree split --prefix=Slave1 -b slave1_br_1.0.0

在此分支上创建标记

代码语言:javascript
复制
git checkout slave1_br_1.0.0
git tag -a slave1_tag_1.0.0 -m "the tag 1.0.0"

推送Slave1仓库上的标签

代码语言:javascript
复制
git push slave1 slave1_tag_1.0.0:1.0.0

清除主资料库

清理树枝

代码语言:javascript
复制
git checkout master
git branch -D slave1_br_1.0.0
git tag -d slave1_tag_1.0.0
git gc --prune=now

最后,您将在Slave1存储库上拥有一个与具有相同名称的主存储库相同的提交标记,此处为1.0.0

IMHO更好的一点是,没有其他分支来自为此创建的临时分支(只有标签被推送)

票数 2
EN

Stack Overflow用户

发布于 2017-08-25 00:41:04

我以一种艰难的方式发现了这一点。

使用子树时,子树存储库中的提交将具有不同的SHA.

因此,您只需要将提交推送到子树,然后在子树存储库中找到您想要标记的特定提交,对其进行标记并推送到子树存储库。

我的设置是使用sourcetree和github.com,但我认为它应该与其他情况相同。

  1. I有一个同步到位桶的主存储库,以及一个子文件夹设置为子树,同步到github存储库。
  2. 我在源树中使用此自定义操作来推送子树

要运行的脚本:git

参数:shiny/app是我的子文件夹,webapp是我的github存储库远程名称

代码语言:javascript
复制
subtree push -P shiny/app webapp master --squash

  1. 在子树分支中找到特定的提交,对其进行标记并将标记推送到子树存储库。

这比上面所有的答案都要简单和清晰得多。当然,标签仅限于子树,而不是完整的repo,但我认为这就是我想要的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17911466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档