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

Ahm*_*mad 6 git

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

Ari*_*ini 12

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

git push origin HEAD:refs/tags/foo
Run Code Online (Sandbox Code Playgroud)

您可以删除相同的标签

git push origin :refs/tags/foo
Run Code Online (Sandbox Code Playgroud)

这是一个解释.

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

git push where what:onto
Run Code Online (Sandbox Code Playgroud)

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

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

onto 在您想要的名称中,遥控器将用于引用您正在推送的内容.

例如

git push origin master:master
Run Code Online (Sandbox Code Playgroud)

正在推送到origin提交(以及所有其他先前的提交,如果遥控器没有它们)指向master,请求远程存储库调用它master,即在其master分支中保存与本地master分支中记录的完全相同的SHA1 (这并不完全正确,但接受这个例子来理解原理).

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

试试吧

cat .git/refs/heads/master
Run Code Online (Sandbox Code Playgroud)

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

git push origin refs/heads/master:refs/heads/master
Run Code Online (Sandbox Code Playgroud)

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

git push origin master:refs/tags/foo
Run Code Online (Sandbox Code Playgroud)

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

例如,试试

git checkout master
cat .git/refs/heads/master
cat .git/HEAD
Run Code Online (Sandbox Code Playgroud)

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

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

git push origin HEAD:/refs/tags/a_tag_name
Run Code Online (Sandbox Code Playgroud)

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

如果你推a,null你将删除标签

git push origin :/refs/tags/a_tag_name
Run Code Online (Sandbox Code Playgroud)

就这样