Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Disable tag deletion

Tags:

git

tags

I have a central bare repository in which a team publish (push) their commits. In this main repository, I want to disable the tag deletion and renaming.

Is there a solution like a hook or something ?

like image 843
Joker Avatar asked Jun 17 '11 19:06

Joker


People also ask

What is a protected tag?

Protected tags allow control over who has permission to create or update Git tags. Each rule allows you to match either an individual tag name, or use an appropriate pattern to control multiple tags at once.

How do I remove a remote tag?

Select and expand the "Tags" tab on the left. Right-Click on the tag you want deleted. Select "Delete YOUR_TAG_NAME" In the verification window, select "Remove Tag From Remotes"


1 Answers

git help hooks contains documentation about the hooks. The update hook is invoked when Git is about to create/move/delete a reference. It is called once per reference to be updated, and is given:

  • 1st argument: the reference name (e.g., refs/tags/v1.0)
  • 2nd argument: SHA1 of the object where the reference currently points (all zeros if the reference does not currently exist)
  • 3rd argument: SHA1 of the object where the user wants the reference to point (all zeros if the reference is to be deleted).

If the hook exits with a non-zero exit code, git won't update the reference and the user will get an error.

So to address your particular problem, you can add the following to your update hook:

#!/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"
        ;;
esac
like image 154
Richard Hansen Avatar answered Nov 12 '22 18:11

Richard Hansen