Mercurial: ¿Eliminar permanentemente los datos sensibles de HG repo?

Sé que en Mercurial, "la historia es sagrada".

Pero digamos que alguien accidentalmente comete algo que no debería, como un file de configuration que contiene una contraseña o algo así. Incluso digamos que pasa algo de time antes de que alguien se dé count, por lo que ha estado esperando varias confirmaciones. Obviamente, el descubridor luego elimina los datos confidenciales del repository.

¿Hay alguna forma de eliminar de manera permanente ese file o los datos confidenciales del historial de confirmaciones, como si nunca existieran? ¿O esa información confidencial sería una parte permanente del repository por siempre jamás?

Hay algunos methods para lograr esto. Todos requieren la cooperación de todos los que han clonado su repository o retirado sets de cambios después de que se introdujo el cambio.

Qué método usar depende de la naturaleza exacta de los datos comprometidos y de dónde se encuentra en el historial. Todos ellos requieren el uso de extensiones Mercurial y no pueden lograrse con Mercurial central. Afortunadamente, todas las extensiones requeridas se envían por defecto con Mercurial y simplemente tienen que estar habilitadas.

No entraré en detalles sobre los methods aquí, ya que hay varias respuestas que dan diferentes methods en la pregunta de si esto es una estafa. Solo quiero aclarar que la respuesta aceptada en esa pregunta es técnicamente correcta, pero no útil. En realidad es posible.

No he investigado los detalles de cómo funcionan los ganchos, por lo que esta idea puede no funcionar completamente. Es posible configurar ganchos para no permitir el envío, extracción y extracción de files confidenciales. Hay ganchos que se ejecutarán antes de precommit and preoutgoing o presionar ( precommit and preoutgoing ). Proteger los ganchos para que no sean eludidos es otro tema que Mercurial: The Definitive Guide también discute.

No en realidad no. Si puede convencer a todos los que tuvieron acceso para eliminar y volver a cerrar, puede quitar el file del acceso futuro.

Pero si usted, por ejemplo, empujó su contraseña de root a un repository público de Bitbucket -? Deberías cambiarlo Su información ahora es pública y se filtró, y debe considerarse como tal. Lo siento.

Si, y solo si, este repository no ha escapado a la naturaleza , puede eliminar un file del historial clonándolo esencialmente en un nuevo repository mientras filtra el file confidencial en el process, usando hg convert Hg Convert Extension doc aquí

Comúnmente, encontramos algo cuando auditamos el repository antes de publicarlo o entregarlo a un cliente, como un file web.config o ini con una contraseña.

La extensión no está habilitada de manera pnetworkingeterminada, pero se incluye con todos los clientes que uso, debe habilitarla antes de que Mercurial reconozca el command de conversión.

Si usa Tortoise Hg o Kiln, por ejemplo:

  1. Open Tortoise Hg -> Configuración global -> Extensiones
  2. Marque la casilla al lado de "Convertir"
  3. Haga clic en Aceptar

O edita Mercurial.ini directamente:

 [extensions] convert = 

Vaya al directory sobre su repository (en mi ejemplo, mis repos es HelloApp):

  1. Crea un file llamado filemap.txt

  2. Agregue una línea con la ruta completa al nombre de file que desea excluir.

     exclude HelloApp/sensitive.config 
  3. Abra un símbolo del sistema, cd al mismo directory, que contiene su file de file.txt, y ejecute la conversión de hg

     cd C:\projects hg convert --filemap filemap.txt HelloApp HelloApp_clean 
  4. A continuación, obtenga la última copy de trabajo:

     cd HelloApp_clean hg update 

Tendrá que crear un clon nuevo en su server con su copy limpia.