2012-05-02 18 views
6

Tengo una tarea de programación que entregaré en mi Universidad para el final de esta semana y tienen reglas estrictas sobre el anonimato de las tareas para mantener la imparcialidad, por lo tanto, si aparece mi nombre (o cualquier otra información de identificación obvia) en el trabajo puede ser automáticamente descalificado.¿Cómo anonimizo un repositorio mercurial?

Mientras me preparaba para grabar todo en un disco, acabo de notar/recordar que mi repositorio HG es completo de copias de mi nombre. El código está limpio, pero el autor de cada conjunto de cambios es mi nombre completo y mi correo electrónico, o mi ID de inicio de sesión de la universidad y el nombre de host de una computadora de laboratorio (depende de dónde esté trabajando).

Necesito crear una versión anónima del repositorio (o cambiar todos los nombres para el número de identificación de mi estudiante) sin perder ninguna de la otra información que contiene.

Entonces, como dice el titular, ¿cómo puedo anonimizar un repositorio mercurial?

Respuesta

8

Puede usar el Convert extension de Mercurial con el --authors option para "convertir" su repositorio en un nuevo repositorio de Mercurial, cambiando los nombres de los autores durante la conversión.

Presupuesto de la segunda enlace:

Convert también puede volver a asignar los nombres de autor durante la conversión, si se proporciona la opción --authors. El argumento debería ser un archivo de texto simple que asigna cada autor de confirmación de origen a un autor de confirmación de destino. Es es útil para SCM de origen que utilizan inicios de sesión de UNIX para identificar autores (por ejemplo: CVS). Ejemplo:

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

Gracias, esto hizo el trabajo muy bien. Algunos puntos de advertencia para otros: (1) parece que necesita enumerar todos los nombres de usuario por separado y con precisión (por lo que necesita un poco de trabajo por adelantado para cotejar) (2) las ID de muchos conjuntos de cambios se modificaron (3) presumiblemente debido a 2, se creó un conjunto de cambios adicional para corregir las etiquetas en el repositorio. – DMA57361

+3

@ DMA57361: 1) Use 'hg log --template '{author} \ n' | ordenar -u' para obtener una lista de nombres de usuario únicos, 2) ID de conjuntos de cambios se forman utilizando una función de hash criptográfica (SHA-1) que (entre otras cosas) toma los nombres de usuario como entrada, 3) Exactamente a la derecha! –

+0

@MartinGeisler (1) habría ayudado ayer :), pero afortunadamente solo tuve que recopilar 4 nombres de usuario en este caso. (2) Yo estaba al tanto, pero pensé en agregarlo como una advertencia para futuros lectores, ya que presumiblemente impedirá que el repositorio convertido sea empujado/fusionado/etc de nuevo al original. – DMA57361

1

Si no tiene ningún conjunto de cambios de fusión, puede intentar usar el comando graft en Mercurial 2.0 para injertar su repositorio en un nuevo repositorio mientras cambia el nombre de usuario grabado.

Si tiene conjuntos de cambios de fusión, entonces podría ser posible usar la extensión transplant en Mercurial 2.2, aunque parece más difícil cambiar el nombre de usuario grabado.

Cuestiones relacionadas