8 Stimmen

Löschen des Master-Zweigs in Git nicht zulassen

Ich versuche, einen Git-Hook einzurichten, der es jedem verwehrt, die master , alpha y beta Zweige unseres Repositorys. Kann mir jemand dabei helfen? Ich habe noch nie einen Git-Hook gemacht, also möchte ich mein Glück bei der Entwicklung meines eigenen nicht ohne ein wenig Hilfe versuchen.

8voto

Greg Bacon Punkte 127209

Unkompliziert mit einer pre-receive Haken. Angenommen, Sie verwenden ein einfaches zentrales Repository, dann platzieren Sie den folgenden Code in your-repo.git/hooks/pre-receive und vergessen Sie nicht chmod +x your-repo.git/hooks/pre-receive .

#! /usr/bin/perl

# create: 00000... 51b8d... refs/heads/topic/gbacon
# delete: 51b8d... 00000... refs/heads/topic/gbacon
# update: 51b8d... d5e14... refs/heads/topic/gbacon

my $errors = 0;

while (<>) {
  chomp;

  next
    unless m[ ^
              ([0-9a-f]+)       # old SHA-1
              \s+
              ([0-9a-f]+)       # new SHA-1
              \s+
              refs/heads/(\S+)  # ref
              \s*
              $
            ]x;

  my($old,$new,$ref) = ($1,$2,$3);

  next unless $ref =~ /^(master|alpha|beta)$/;

  die "$0: deleting $ref not permitted!\n"
    if $new =~ /^0+$/;
}

exit $errors == 0 ? 0 : 1;

7voto

CB Bailey Punkte 693084

Wenn Sie damit zufrieden sind, alle Löschungen von Zweigen über 'push' zu verweigern, können Sie einfach die Konfigurationsvariable receive.denyDeletes a true auf Ihr Repository.

Wenn Sie eine ausgefeiltere Kontrolle benötigen, empfehle ich Ihnen, einen Blick auf die update-paranoid Hook aus der Git-Distribution von contrib/hooks Ordner. Es erlaubt Ihnen, pro Ref Acls einzurichten, die Dinge wie das Verweigern von Nicht-Fast-Forwards und das Verweigern von Löschungen via Push sowie einige anspruchsvollere Verhaltensweisen tun können.

update-paranoid sollte alles tun, was Sie brauchen, ohne dass Sie einen eigenen Hook schreiben müssen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X