2012-05-02 9 views
6

Ho un incarico di programmazione che devo consegnare alla mia università per la fine di questa settimana e hanno regole severe sull'anonimato degli incarichi per mantenere l'imparzialità, quindi se il mio nome (o qualsiasi altra informazione identificativa evidente) appare ovunque nel lavoro può essere squalificato automaticamente.Come posso anonimizzare un repository mercuriale?

Mentre mi preparavo a masterizzare tutto su disco, ho appena notato/ricordato che il mio repository HG è completo di di copie del mio nome. Il codice è tutto pulito, ma l'autore di ogni changeset è il mio nome e cognome e-mail o il mio ID di accesso all'università e il nome host di un computer da laboratorio (dipende da dove stavo lavorando).

Ho bisogno di creare una versione anonima del repository (o di scambiare tutti i nomi per il mio numero ID studente) senza perdere nessuna delle altre informazioni in suo possesso.

Quindi, come dice il titolo, come posso anonimizzare un repository mercuriale?

risposta

8

È possibile utilizzare Mercurial Convert extension con lo --authors option per "convertire" il repository in un nuovo repository Mercurial, modificando i nomi degli autori durante la conversione.

Citazione dal secondo link:

Convert può anche rimappare i nomi degli autori durante la conversione, se l'opzione --authors è fornito. L'argomento dovrebbe essere un semplice file di testo che associa ogni autore di commit di origine a un autore di commit di destinazione. È utile per gli SCM di origine che utilizzano gli accessi UNIX per identificare gli autori (ad esempio: CVS). Esempio:

john=John Smith <[email protected]> 
tom=Tom Johnson <[email protected]> 
+0

Grazie, questo ha fatto il lavoro bene. Alcuni punti di avvertimento per gli altri però: (1) sembra che sia necessario elencare tutti i nomi utente separatamente e con precisione (quindi è necessario un po 'di lavoro in anticipo per fascicolare) (2) presumibilmente gli ID di molti changeset sono stati modificati (3) a causa di 2, è stato creato un changeset aggiuntivo per correggere i tag nel repository. – DMA57361

+3

@ DMA57361: 1) Usa 'hg log --template '{author} \ n' | sort -u' per ottenere una lista di nomi utente univoci, 2) gli ID changeset sono formati usando una funzione hash crittografica (SHA-1) che (tra le altre cose) prende i nomi utente come input, 3) Esattamente! –

+0

@MartinGeisler (1) avrebbe aiutato ieri :), ma per fortuna ho dovuto raccogliere solo 4 nomi utente in questo caso. (2) Ne ero al corrente, ma ho pensato di aggiungerlo come un avvertimento ai futuri lettori, poiché presumibilmente fermerebbe il repository convertito che viene mai spinto/fuso/etc di nuovo nell'originale? – DMA57361

1

Se non si dispone di alcun changeset di unione, è possibile provare a utilizzare il comando in Mercurial 2.0 per innestare il repository in un nuovo repository mentre si modifica il nome utente registrato.

Se si dispone di un gruppo di changeset, potrebbe essere possibile utilizzare l'estensione transplant in Mercurial 2.2, anche se la modifica del nome utente registrato sembra essere più difficile.

Problemi correlati