2013-03-24 15 views
6

So che in Mercurial "la storia è sacra".Mercuriale: rimuovi permanentemente i dati sensibili dal repository HG?

Ma diciamo che qualcuno accidentalmente commette qualcosa che non dovrebbero, come un file di impostazioni contenente una password o qualcosa del genere. Diciamo anche che passa del tempo prima che qualcuno se ne accorga, quindi è stato in giro per diversi commit. Ovviamente, lo scopritore rimuove quindi i dati sensibili dal repository.

C'è un modo per cancellare in modo permanente quel file oi dati sensibili dalla cronologia del commit, come se non fosse mai esistito? O quei dati sensibili sarebbero solo una parte permanente del repository per sempre?

+1

dupe: http://stackoverflow.com/questions/1029480/is-there-a-way-to-remove-the-history-for-a-single-file-in-mercurial –

+2

La risposta fornita è non molto utile. È tecnicamente corretto in un certo senso. Ma se sei disposto a dire a tutte le persone che potrebbero aver clonato il tuo repository per rimuovere una modifica, puoi rimuovere il changeset che introduce la modifica, quindi usare qualcosa come trapianto per spostare tutte le modifiche dopo di ciò e darle nuovi hash di commit. – Omnifarious

+1

La risposta di Martin Geisler è molto migliore, ed è un altro metodo in aggiunta a quello che ho suggerito. – Omnifarious

risposta

2

Ci sono alcuni metodi per farlo. Tutti richiedono la collaborazione di tutti coloro che hanno clonato il proprio repository o hanno estratto i changeset da esso dopo che è stata introdotta la modifica.

Quale metodo utilizzare dipende dalla natura esatta dei dati impegnati e dalla loro posizione nella cronologia. Tutti richiedono l'uso di estensioni Mercurial e non possono essere eseguite con il nucleo Mercurial. Fortunatamente, tutte le estensioni richieste vengono fornite di default con Mercurial e devono semplicemente essere abilitate.

Non sto entrando nel dettaglio dei metodi qui poiché ci sono diverse risposte che forniscono metodi diversi nella domanda, questo è un errore. Voglio solo essere chiaro che la risposta accettata in questa domanda è tecnicamente corretta, ma non utile. In realtà è possibile.

1

Non ho esaminato i dettagli di come funzionano gli hook, quindi questa idea potrebbe non essere completamente disponibile. Potrebbe essere possibile impostare hook per non consentire l'invio, il push e il pull dei tuoi file sensibili. Ci sono ganci che verranno eseguiti prima di eseguire commit o push (precommit and preoutgoing). Proteggere i ganci in modo da non essere aggirati è un altro problema che è Mercurial: anche la Guida definitiva discute.

0

No. Non proprio. Se riesci a convincere tutti coloro che hanno accesso alla cancellazione e reclone, puoi rimuovere il file dall'accesso futuro.

Ma se, ad es., Hai inserito la tua password di root in un repository pubblico di Bitbucket -? Dovresti cambiarlo. Le tue informazioni sono ora pubbliche e trapelate e dovrebbero essere considerate tali. Scusate.

0

Se, e solo se, questo repository non è sfuggito in libertà, è possibile rimuovere un file dalla storia essenzialmente clonazione per un nuovo repository durante il filtraggio del file sensibili nel processo, utilizzando hg convertHg Convert Extension doc here

Comunemente, troviamo qualcosa quando abbiamo audit della repository prima della pubblicazione o consegna ad un cliente, come ad esempio un web.config o un file ini con una password.

L'estensione non è abilitata per impostazione predefinita, ma è inclusa con tutti i client che utilizzo, è necessario abilitarlo prima che Mercurial riconosca il comando di conversione.

Se si utilizza Tortoise Hg o forno, ad esempio:

  1. Aperto Tortoise Hg -> Impostazioni globali -> Estensioni
  2. Seleziona la casella accanto a "Convertire"
  3. Fare clic su Ok

oppure modifica direttamente Mercurial.ini:

[extensions] 
convert = 

Passare alla directory sopra il repository (nel mio esempio, il mio pronti contro termine è HelloApp):

  1. Creare un file denominato filemap.txt

  2. Aggiungere una riga con il percorso completo per il nome del file voglio escludere.

    exclude HelloApp/sensitive.config 
    
  3. Aprire un prompt dei comandi, cd nella stessa directory, che contiene la filemap.txt, ed eseguire il hg convertire

    cd C:\projects 
    
    hg convert --filemap filemap.txt HelloApp HelloApp_clean 
    
  4. Quindi ottenere ultima copia di lavoro:

    cd HelloApp_clean 
    hg update 
    

Sarà necessario creare un nuovo clone sul server con la copia pulita.

Problemi correlati