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

时间:2013-09-30 10:49:43

标签: git

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

2 个答案:

答案 0 :(得分:12)

您可以使用

创建一个完全没有本地标签的远程标签
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,那就是在其master分支中保存与本地SHA1分支中记录的完全相同的SHA1(这不完全正确,但接受这个例子来理解原理)。

现在,作为一个事实,分支和标签只是存储提交的.git/refs/heads的普通文件。您可以将它们视为排序指针变量,并引用存储库中的某些提交。 分支和标签存储在.git/refs/tagscat .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 ,它是指向当前位置的指针

例如,尝试

master

它应该提供两倍相同的值,确认HEADmaster引用相同的提交,即 on git push origin HEAD:/refs/tags/a_tag_name

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

origin

在某种程度上,您要求远程refs/tags/a_tag_name在其文件HEAD中写入本地null中包含的SHA1的值。这将在远程存储库中创建标记。

如果您按git push origin :/refs/tags/a_tag_name ,则会删除标记

{{1}}

这就是全部

答案 1 :(得分:0)

我需要将标签推送到本地中不存在的遥控器,而位于遥控器的头部,而不是我的。

template <class Type>
class Test;

template <template <typename ...> class C, typename ... Ts>
class Test<C<Ts...>>
{
public:
   Test() : mSC(foo<C, Ts...>()) {}
   SomeClass mSC;
};

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

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