Dav*_* C. 7 git git-remote git-tag
我们最近遇到了Git存储库中的标签问题.
我们在本地和远程删除了我们的标签,但每次我们推送或从远程获取时它们都会自动恢复.
我们目前正在组建一个三人小组,当我们认为我们实际上已经摆脱了标签时,有人会做出推动,我们都会再次获得它们.
我们都试过了:
git tag -d 12345
git push origin :refs/tags/12345
Run Code Online (Sandbox Code Playgroud)
其他人遇到过这个问题?
再次删除标签,然后执行以下操作:
# verify that the tag was removed form another computer
git fetch --all --prune
Run Code Online (Sandbox Code Playgroud)
Important如果您使用的是旧版本的git <2.0git push而没有分支名称,则可能会将所有内容推branches & tags送到远程.验证这不是这种情况.
What else can you try?# push just the tag name without refs/tags/...
git push origin :tagname
# same as above but with the `--delete` flag instead of `:`
git push --delete origin tagname
# as you already did locally - delete the tag as well
git tag -d tagname
Run Code Online (Sandbox Code Playgroud)
Git hooks验证没有阻止您删除标记的git挂钩.
这是一个示例钩子:
#!/bin/sh
log() { printf '%s\n' "$*"; }
error() { log "ERROR: $*" >&2; }
fatal() { error "$*"; exit 1; }
case $1 in
refs/tags/*)
[ "$3" != 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to delete tags"
[ "$2" = 0000000000000000000000000000000000000000 ] \
|| fatal "you're not allowed to move tags"
;;
# personal touch :-)
echo " "
echo " |ZZzzz "
echo " | "
echo " | "
echo " |ZZzzz /^\ |ZZzzz "
echo " | |~~~| | "
echo " | |- -| / \ "
echo " /^\ |[]+ | |^^^| "
echo " |^^^^^^^| | +[]| | | "
echo " | +[]|/\/\/\/\^/\/\/\/\/|^^^^^^^| "
echo " |+[]+ |~~~~~~~~~~~~~~~~~~| +[]| "
echo " | | [] /^\ [] |+[]+ | "
echo " | +[]+| [] || || [] | +[]+| "
echo " |[]+ | || || |[]+ | "
echo " |_______|------------------|_______| "
echo " "
echo " "
echo " This is your last time trying to "
echo " delete or to move our tags. :-) "
echo " "
esac
Run Code Online (Sandbox Code Playgroud)
Git v2.0发行说明
向后兼容性说明
什么
git push [$there]时候没说什么推,matching到目前为止我们已经使用了传统的语义(只要那里已经有相同名称的分支,你的所有分支都被发送到远程).在Git 2.0中,默认是现在的simple语义,它推动:
只有当前分支到具有相同名称的分支,并且仅当当前分支设置为与该远程分支集成时,如果您正在推送到同一个远程获取; 要么
只有当前分支到具有相同名称的分支,如果您要推送到通常不从中获取的远程.
您可以使用配置变量
push.default来更改此设置.如果您是想要继续使用matching语义的老计时器 ,则可以将变量设置matching为.阅读文档了解其他可能性.