2011-10-21 12 views
5

Me gustaría poder invocar algunos procesamientos previos en los archivos antes de que Git intente fusionarlos y el proceso posterior combine el resultado. La idea general aquí es que algunos archivos son difíciles de fusionar automáticamente tal como están, pero se pueden convertir a una forma más fácil para el procesamiento. Aquí está mi caso de uso concreto:¿Cómo envuelvo la fusión del archivo git con el procesamiento previo y posterior?

Tengo un repositorio de datos en su mayoría no muy sensibles. Dentro de ese repositorio, tengo un poco de datos confidenciales encriptados, en un archivo llamado sensitive.pgp. Me gusta este acuerdo porque no tengo que confiar en que mi repositorio se gestiona de forma segura, solo tengo que confiar en el cifrado y la contraseña. Por supuesto, es posible que Git no pueda fusionar el texto encriptado, por lo que si se modifica sensitive.pgp en dos cajas a la vez, no hay fusión disponible, incluso si los cambios en el texto claro se separan fácilmente. El flujo de trabajo manual es el siguiente:

  1. Se ha detectado un conflicto de mezcla para sensitive.pgp.
  2. Comience git-mergetool. La herramienta tampoco puede fusionar archivos PGP.
  3. Ahora tengo archivos temporales para mi versión, la versión base y la versión remota.
  4. Descifrar los tres archivos.
  5. Invoque mi herramienta de fusión en las versiones descifradas.
  6. Encripta el resultado.
  7. git-add the new sensitive.pgp.

Me gustaría decirle a Git que aplique mi procesamiento previo y posterior incluso antes de combinar, para que pueda manejarlo automáticamente. Puedo imaginar muchos otros escenarios con el mismo patrón general: casi siempre que tienes un formato de archivo comprimido con una estructura subyacente similar al texto (por ejemplo, PDF, OpenOffice, Word), por ejemplo.

¿Alguna sugerencia?

+0

Puntos de bonificación: ¿Hay alguna forma de configurar esta operación para que se realice únicamente en archivos o tipos de archivos específicos, aparte de poner esa lógica en el procesamiento previo y posterior? –

Respuesta

4

Usted tiene algunas opciones:

  1. definen una/filtro de registro de pago en .gitattributes (ver git help attributes) que descifra los archivos en la caja (lo que les deja sin cifrar en su árbol de trabajo) y las encripta antes de registrarse
  2. definir un controlador de combinación personalizada (consulte git help attributes y las opciones en merge.<driver>.*git help config)
  3. definen una herramienta de combinación personalizada (consulte git help mergetool y las opciones en mergetool.<tool>.*git help config) que descifra antes de invocar la herramienta de fusión real y encripta cuando la verdadera herramienta de combinación devuelve

Puede configurar git sólo para aplicar filtros personalizados y combinar los conductores a archivos específicos, pero la herramienta de combinación se aplica a todo el repositorio a menos lo limitas pasando nombres de archivos al comando git mergetool. Puede diseñar su herramienta de combinación personalizada para cambiar su comportamiento según el nombre del archivo que se está fusionando.

+0

Muchas gracias. Empecé a retocar con un controlador de combinación personalizado, y eso parece una buena solución. –

+1

Aquí hay un controlador de combinación que hace exactamente esto: https://gist.github.com/2480455 –

Cuestiones relacionadas