在远程存储库中添加标记,而不在本地添加repo

问题描述 投票:6回答:2

无论如何都要在远程存储库中添加标记而不在本地克隆/添加它。我只需要用它来标记QA版本

git
2个回答
11
投票

您可以创建一个根本没有本地标签的远程标签

git push origin HEAD:refs/tags/foo

您可以删除相同的标签

git push origin :refs/tags/foo

这是一个解释。

接受命令git push。不过于严格,一般语法可以解释为

git push where what:onto

where是您要推送到的远程存储库的名称。

what是一个引用(使用git提供的几种类型之一)来提交本地存储库。它可以是SHA1,分支名称,标记名称或其他。

onto在你希望遥控器用来引用你正在推送的东西的名称中。

例如

git push origin master:master

正在推动origin提交(以及所有其他以前的提交,如果遥控器没有它们)由master指出,要求远程存储库将其命名为master,即在其master分支中保存与您记录的完全相同的SHA1当地的master分支(这不完全正确,但接受这个例子来理解原理)。

现在,作为事实,分支和标签只是存储提交的SHA1的普通文件。您可以将它们视为排序指针变量,并引用存储库中的某些提交。分支和标签存储在.git/refs/heads.git/refs/tags

试试吧

cat .git/refs/heads/master

所以,以前可能已经写好了

git push origin refs/heads/master:refs/heads/master

如果要在远程存储库中创建一个标记foo,指向master分支引用的相同提交,则可以运行

git push origin master:refs/tags/foo

如果要在远程存储库上创建一个标记,引用与您当前完全相同的提交,请使用特殊分支HEAD,它是指向当前位置的指针

例如,试试

git checkout master
cat .git/refs/heads/master
cat .git/HEAD

它应该给两倍相同的值,确认masterHEAD引用相同的提交,即你在master

因此,为了创建引用本地当前提交使用的远程标记

git push origin HEAD:/refs/tags/a_tag_name

这有点像你要求远程origin在其文件refs/tags/a_tag_name中写入当地HEAD中包含的SHA1的值。这将在远程存储库中创建标记。

如果您推送null,您将删除标签

git push origin :/refs/tags/a_tag_name

就这样


0
投票

我需要将一个标签推送到本地不存在的远程标签,而不是我的标签。

git push origin origin/head:refs/tags/foo

我们遇到了从单个机器部署的问题,这些机器可能会或可能没有获得最新版本,并标记了版本。即使该版本包含最新的提交,该标记也会在日志中显示。

上面的答案是正确的,并且很好地解释了,但没有解决我在问题上的变化。

© www.soinside.com 2019 - 2024. All rights reserved.