C’è un modo per bloccare un ramo in GIT

Ho un’idea di bloccare un repository dagli utenti che spingono i file in esso avendo uno script di blocco nel hook di aggiornamento GIT poiché il push può solo riconoscere l’ID utente come argomenti e non i rami. Quindi posso bloccare l’intero repo che blocca solo una directory.

C’è un modo per bloccare un ramo specifico in GIT?

O c’è un modo in cui un hook di aggiornamento può identificare da quale ramo l’utente sta spingendo e in quale ramo viene inserito il codice?

Il ramo su cui è stato eseguito il push è il primo parametro del hook di aggiornamento . Se vuoi bloccare il ramo myfeature per spingere, questo codice (inserito in hooks/update ) lo farà:

 #!/bin/sh # lock the myfeature branch for pushing refname="$1" if [[ $refname == "refs/heads/myfeature" ]] then echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "You cannot push to myfeature! It's locked" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" exit 1 fi exit 0 

Il hook di aggiornamento, dai documenti:

L’hook viene eseguito una volta per ogni ref da aggiornare e prende tre parametri:

  • il nome dell’aggiornamento in fase di aggiornamento,
  • il vecchio nome dell’object memorizzato nel riferimento,
  • e il nuovo objectname da memorizzare nel rif.

Quindi … sì, sa esattamente quale ramo viene spinto, e può semplicemente controllare che il parametro e l’errore di uscita non vogliano il ramo premuto.

E se vuoi farlo (in modo intelligente) prima che l’utente abbia caricato gli oggetti, puoi usare il hook di pre-ricezione:

Questo hook viene eseguito una sola volta per l’operazione di ricezione. Non richiede argomenti, ma per ogni ref da aggiornare riceve sullo standard input una riga del formato:

SP SP LF

dove è il vecchio nome object memorizzato nel ref, è il nuovo nome object da memorizzare nel ref e è il nome completo del ref.

(quelli sono spazi e line-feed)

Uno strumento come la gitolite ha questo tipo di funzionalità che credo: http://github.com/sitaramc/gitolite