2011-11-29 11 views
11

Problema¿Cuál es la mejor práctica para mantener los secretos fuera de un repositorio git?

Considere este árbol de archivos como mi repositorio de desarrollo.

 
- foo/ 
    - .git/ 
    - [...] 
    - bar/ 
    - backupclient.py 
    - supersecretstoragecredentials.ini 

para el desarrollo, supersecretstoragecredentials.ini necesita ser llenado con credenciales válidas - mientras que todavía tengo que mantener a una versión limpia de la misma en el repositorio para que otros usuarios pueden configurar fácilmente sus credenciales.

soluciones posibles

  1. .gitignoresupersecretstoragecredentials.ini y crear un supersecretstoragecredentials.ini-example,
    1. Instruir al usuario copiar supersecretstoragecredentials.ini-example a supersecretstoragecredentials.ini.
  2. agregar una ubicación de archivo de configuración imperiosa de backup.py que es ignorado por git, por ejemplo, supersecretstoragecredentials_local.ini.

Como kan señalado, estas dos soluciones son similares, pero no del todo la misma, el flujo de trabajo se refiere.

¿hay alguna otra alternativa? ¿Tiene git algún tipo de funcionalidad para ayudar con este tipo de problemas?

+2

+1 para la opción 1 – Thilo

Respuesta

11

Compruebe en el supersecretstoragecredentials.ini con algunos valores de marcador de posición y luego

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Git no hará un seguimiento de los cambios futuros en este archivo.

puede restablecer esta usando

git update-index --no-assume-unchanged supersecretstoragecredentials.ini 
+1

El único problema con esta solución es que un 'git pull' de otro usuario creará conflictos de combinación. Aún así, es una gran solución siempre que su base de consumidores sea limitada. – joar

+0

@jwandborg ¡buen punto a tener en cuenta! solo propuso esta solución ya que este archivo se usa para almacenar credenciales locales. – dexter

5

Lo que está describiendo en la Opción 1 está básicamente cubierto por el paso smudge de un contenido filter driver.

filter driver

tiene las dos opciones presentadas en la pregunta "How to work on a drop-in library?".

el guión mancha tomaría su supersecretstoragecredentials.ini-example (versionado), copiarlo como supersecretstoragecredentials.ini ( no versionado, ignorada por Git), y llenar sus valores de otra fuente.

Pero además del aspecto técnico de cómo implementará su política, la medida principal es asegurarse de que sus valores secretos no se almacenen en un repositorio de Git, sino que provengan de otro referencial.

3

Utilizo su solución (sus dos soluciones son iguales, solo los nombres de los archivos son diferentes). ¿Tienes algún problema con eso? ¿Qué tipo de funcionalidad esperarías?

Además, no es una solución más interesante

git update-index --assume-unchanged supersecretstoragecredentials.ini 

Es de esperar que es lo que quieres. Sin embargo, fallaría si el upstream cambia el archivo y usted está tirando del cambio (no está completamente seguro de si es bueno o malo).

1

En mi experiencia, después de haber probado todas las opciones enumeradas en la pregunta y en las respuestas hasta el momento, la opción # 2 ha demostrado ser el más simple y más limpio. Resuelve el problema de manera confiable, con la mínima magia, y es más fácil de entender. Es aburrido de la mejor manera.

+0

Y con eso, la solución mencionada en http://stackoverflow.com/a/8309450/202522 es la opción más fácil y la mejor opción. – joar

+0

No, quiere '.gitingore' simple para el archivo' _local.ini'. –

0

Algo que estoy probando en este momento es git-secrets.

https://github.com/awslabs/git-secrets

Se engancha en el GIT de procesos y controles de comprometerse para los patrones que se parecen a las credenciales que no debe ser registrado.

Usted tiene que asegurarse de que está instalado en el sistema de cada desarrollador y configurado para cada repositorio git. Esto se puede lograr con la suficiente facilidad si integra un cheque en el proceso de compilación.

Cuestiones relacionadas