Git ha una "modalità sicura" per impedire la riscrittura della cronologia?

11

Quando sei un po 'fresco con Git (e DVCS in generale), e inizi a esplorare le modifiche di riscrittura della cronologia, sei sicuro che il repository sia solo locale, ma potresti incontrare dei problemi se lavori con i telecomandi e prova a spingere tali cambiamenti.

Una caratteristica che mi aspetterei è la possibilità di abilitare una "modalità sicura" che fondamentalmente mi impedisce di fare qualsiasi cosa non dovrei fare ... E cosa intendo con questo? Intendo i cambiamenti di riscrittura della storia per cose già spinte a un'origine. Non riesco a definirlo con precisione, ma questo includerebbe casi come:

  • commit --amend quando HEAD è già stato spinto
  • rebase di un ramo non locale
  • reset di un ramo che è stato premuto

Questi sono esempi di situazioni che probabilmente faranno fallire il prossimo push (perché non sarebbe un avanzamento rapido, IIRC). Ne ho fatto un po 'per caso e ho dovuto ricreare il ramo sul telecomando. E ho comunque avuto la fortuna di farlo abbastanza velocemente da non farmi scrivere la storia che ho riscritto.

Credo sia possibile identificare questo tipo di modifiche e, su richiesta, impedire all'utente di produrle. C'è forse un'opzione per questo?

Se non c'è, pensi che valga la pena tentare di crearlo? Vorresti provare a definire esattamente come identificare un "cambiamento pericoloso"?

    
posta Kos 20.04.2012 - 10:35
fonte

3 risposte

5

Questo sembra molto vicino, se non la stessa domanda di Strategia per Prevenzione o acquisizione della cronologia Git Riscrivi

Per riassumere puoi abilitare

git config --system receive.denyNonFastforwards true

e

git config --system receive.denyDeletes true

Oppure scrivi un hook per ricevere post per rifiutare qualsiasi cosa tu determini è una riscrittura.

    
risposta data 20.04.2012 - 12:34
fonte
2

No perché fa parte della filosofia di git di darti piena potenza e ti consente di gestire quel potere nel modo desiderato.

Se non aderisci a questa filosofia, allora il passaggio a Mercurial potrebbe valere in quanto consentono la riscrittura della cronologia, ma in un modo limitato o, per essere chiaro, riluttante, che ti fa sentire che non è una buona idea.

    
risposta data 20.04.2012 - 11:12
fonte
2

AFAIK, il modo in cui git risolve questi problemi è che ogni volta che richiedi un'azione del genere, la eseguirà localmente, ma ti informerà che ciò che stai facendo potrebbe avere conseguenze indesiderabili. A quel punto, non hai ancora inserito nulla, quindi sei in grado di rivedere il tuo repository locale e, eventualmente, di annullare la modifica pericolosa prima di eseguire il push. Devi prestare attenzione a ciò che ti sta dicendo git, e faresti meglio a stare attento quando ripari tali errori.

    
risposta data 20.04.2012 - 11:39
fonte

Leggi altre domande sui tag