2009-11-18 5 views
38

Ich frage mich, gibt es eine Möglichkeit, 'git push --force' auf einem Repository zu verhindern (nur auf Master-Zweig)?Gibt es eine Möglichkeit, das git-Repository so zu konfigurieren, dass 'git push --force' abgelehnt wird?

Angenommen ich remote Git Repository und zu tun haben:

  • 'git push' auf 'Master'. Es klappt.
  • 'git push --force' zu 'Zweig-1'. Es klappt.
  • 'git push --force' zu 'Master'. Es wird abgelehnt.

Ist es überhaupt möglich?

Danke für alle Antworten und Vorschläge.

BR, Dawid.

Antwort

40

Einstellung der Konfigurationsvariablen:

receive.denyNonFastForwards 
receive.denyDeletes 

wird verhindern, dass ‚gezwungen‘ drückt aus in allen Filialen arbeiten.

Wenn Sie feinere Pre-Branch-Kontrolle wollen, dann müssen Sie einen 'Haken' auf dem Remote-Repository, wahrscheinlich die 'Update' Hook verwenden.

Es gibt einen Beispiel-Update-Hook namens 'update-paranoid', der wahrscheinlich das tut, was Sie (und mehr) in der Git-Distribution im 'contrib' -Ordner benötigen.

gitweb link

+3

+1 für den Haken (Rohfassung: http://git.kernel.org/?p=git/git.git;a=blob_plain;f=contrib/hooks/update-paranoid;hb=080cbc1275ac09445136ba429d90b5ec85e92c1c) – VonC

+4

Gibt es einen Weg dies für GitHub zu tun? –

+0

'update-paranoid' auf GitHub: https://github.com/git/git/blob/master/contrib/hooks/update-paranoid – go2null

1

Ich schrieb dieses kurzes Update Haken nicht vorspulen Updates zu verhindern (schiebt) auf dem "dev" Zweig in einem Repository:

#!/bin/sh 

REFNAME=$1 
OLDSHA=$2 
NEWSHA=$3 

if [ "refs/heads/dev" != $REFNAME ]; then 
    exit 0 
fi 

MERGEBASE=$(git merge-base $OLDSHA $NEWSHA) 
if [ $OLDSHA = $MERGEBASE ]; then 
    exit 0 
fi 

echo "Not a fast-forward on branch dev" 
exit 1 
0

Github hat bereits das Konzept geschützte Zweige!

Es kann unter Settings -> Branches -> Protected Branches gefunden werden. Feature ist jetzt für alle Benutzer verfügbar - nicht nur für Unternehmen!

Dieser "Schutz" kann für jeden Zweig und für jeden Benutzer, einschließlich Administratoren, aktiviert werden.

Weitere Details hier - https://help.github.com/articles/defining-the-mergeability-of-pull-requests/

Also nicht mehr Haken und beliebiger Code benötigt wird.

Verwandte Themen