如何使用git subtree推送标签?

9 浏览
0 Comments

如何使用git subtree推送标签?

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

Master/

Slave1/

Slave2/

现在我想在Master上打标签,并将每个标签推送到子仓库,怎么做呢?

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

你可以通过git-subsplit实现这个目标,但实际上它有些不方便和慢。

有什么建议吗?

0
0 Comments

问题的原因是,使用git subtree时,子树仓库中的提交会有不同的SHA值。解决方法是,只需将提交推送到子树,然后在子树仓库中找到要打标签的特定提交,将其打标签并推送到子树仓库。

具体步骤如下:

1. 在主仓库中设置一个子文件夹作为子树,同步到GitHub仓库。

2. 使用Sourcetree中的自定义操作来推送子树。操作脚本为:`git subtree push -P shiny/app webapp master --squash`,其中`shiny/app`是子文件夹的路径,`webapp`是GitHub仓库的远程名称。

3. 在子树分支中找到要打标签的特定提交,并将其打标签并推送到子树仓库。

这种方法比其他答案更简单、更清晰。当然,标签仅限于子树而不是整个仓库,但我认为这正是我想要的。这是对我的答案的有趣的替代方案。+1

0
0 Comments

问题的出现原因:

问题是关于如何使用git subtree将标签推送到远程仓库的。在之前的版本中,git push命令没有提供直接推送标签的选项,因此无法直接将标签推送到远程仓库。但是,从git 1.8.3版本开始,git push命令新增了一个--follow-tags选项,可以用来推送标签到远程仓库。然而,这个选项只能推送在refs/tags中的注解标签,而不是子目录中的标签。

解决方法:

为了解决这个问题,可以采取以下步骤:

- 当子目录的代码处于稳定状态时,将主分支(master)合并到子目录的分支(slave1_br)中,并在此处放置一个标签。

- 当另一个子目录的代码处于稳定状态时,将主分支(master)合并到另一个子目录的分支(slave2_br)中,并在此处放置一个标签。

- 然后,可以使用git push命令的--follow-tags选项来推送子目录的分支和标签到远程仓库,例如:

git push --follow-tags slave1 slave1_br
git push --follow-tags slave2 slave2_br

这样就可以只推送与正在推送的分支相关的标签,而不是推送所有的标签。

这种方法可能比较复杂,但可以作为使用git-subsplit的替代方案。

0
0 Comments

问题的出现原因:在使用git subtree时,如果需要将标签(tag)推送到子仓库(Slave1 repository),默认的git subtree命令无法直接实现这一功能。

解决方法:可以通过使用git subtree split命令和额外的操作来实现将标签推送到子仓库的目的。

具体操作步骤如下:

1. 在主仓库(Master Repository)上创建标签(tag)。

git tag -a 1.0.0 -m "the tag 1.0.0"

2. 在Slave1仓库上创建与标签对应的分支。

git checkout 1.0.0
git subtree split --prefix=Slave1 -b slave1_br_1.0.0

3. 在Slave1仓库上创建标签。

git checkout slave1_br_1.0.0
git tag -a slave1_tag_1.0.0 -m "the tag 1.0.0"

4. 将标签推送到Slave1仓库。

git push slave1 slave1_tag_1.0.0:1.0.0

5. 清理主仓库中的临时分支和标签。

git checkout master
git branch -D slave1_br_1.0.0
git tag -d slave1_tag_1.0.0
git gc --prune=now

通过以上步骤,最终可以实现在Slave1仓库中创建与主仓库相同的标签,并且只有临时分支和标签被推送到Slave1仓库,不会产生额外的分支。

这样的操作可以解决git subtree无法直接推送标签到子仓库的问题。

0