2012-04-18 10 views
5

Recentemente abbiamo avuto una tiratura interna "git reset --hard" e abbiamo annullato casualmente un sacco di lavoro sul nostro repo GIT principale. Stiamo recuperando il lavoro, ma voglio assicurarmi che nulla del genere accada di nuovo.In GIT, come posso impedire alle persone di modificare o rimuovere i commit che sono già stati inseriti?

So che ci sono molte domande a riguardo, ma sembrano tutte sul recupero piuttosto che sulla prevenzione. C'è un modo in cui posso evitare di spingere al nostro principale repo che altera o rimuove i commit che sono già stati spinti? C'è un ambiente di configurazione o forse un gancio che farà il lavoro?

+0

chmod --recursive 700/path/to/git/rep e consente solo all'amministratore di accedere al repository principale. –

+0

Un push non rimuoverà mai i commit dal repository remoto. Può muovere i rami, ma i commit sono ancora lì. –

+0

@WilliamPursell: un 'push -f' può rimuovere i commit. –

risposta

7

Ci sono 2 configuration options è possibile impostare sul repo centrale (nudo) per aiutare a prevenire questo problema:

receive.denyNonFastForwards 
receive.denyDeletes 

La prima opzione richiede che tutti spinge aggiungere solo la storia. A git reset seguito da uno git push verrebbe negato.

Il secondo chiude un buco chiuso in cui qualcuno può eliminare un ramo remoto con git push <origin> :<branch-to-delete> e quindi premere nuovamente con un normale git push e qualsiasi modifica abbiano desiderato.

+0

Sembra proprio quello che sto cercando. Lo proverò. Grazie! – Sean