2011-12-06 11 views
5

Tengo una aplicación Rails con un archivo config/my_private_data.yml. Me gustaría enviar toda la aplicación a mi servidor de prueba y a github.Git: ¿Solo inserta el archivo de configuración privada para probar el repositorio y no a github?

Sin embargo, cuando presiono para el servidor de prueba, quiero incluir el archivo privado. Cuando presiono para github, no quiero incluir el archivo privado. ¿Cuál es la forma más fácil de hacerlo?

+2

¿Qué tan privado? Si se trata de un desastre masivo si el archivo se vuelve público, no lo incluya en absoluto (use 'config/private_data.yml.template' con valores predeterminados). Lo más probable es que usted, o alguien se equivoque y tenga los datos en github o en otro lugar donde nunca pensó en el momento. – Unapiedra

+0

No es particularmente privado, pero no es algo que quiera compartir. No publicaría mis códigos nucleares en github ni los pondría en mi aplicación. – Clay

+0

esto aquí debería ser una solución: http://stackoverflow.com/questions/1836742/using-git-how-do-i-ignore-a-file-in-one-branch-but-have-it-committed- en-otro –

Respuesta

1

Puede configurar dos ramas. master y secret. A continuación, puede agregar y confirmar el config/my_private_data.yml en la rama secret que luego puede insertar en la rama maestra en el servidor de pruebas.

touch config/my_private_data.yml 
git checkout -b secret 
git add config/my_private_data.yml 
git commit -m 'Commited secret file' 
git push testserver_repo_url secret 
git checkout master 
git push repo_on_github master 

A continuación, realice una git checkout secret; git rebase master si tiene nuevas confirmaciones en maestro.
No se comprometa en secret y, si lo hace, haga una selección perfecta de esa confirmación.


Ciertamente, no todo es bueno con este enfoque. Por lo que puedo pensar ahora, podrías inadvertidamente empujar la rama secreta a Github. Además, no puede trabajar realmente en master si necesita el archivo my_private_data.yml (sin embargo, puede realizar una extracción de ese archivo desde la rama secreta).

+0

¿Hay una mejor manera de abordar esto? Mi caso de uso es que quiero presionar a github para hacer una copia de seguridad, pero presionar mi servidor de prueba para probar y la aplicación no se cargará sin el archivo privado. – Clay

+0

Supongo que la siguiente pregunta sería si lo contrario es posible, por ejemplo, trabajo en master, que incluye el archivo secreto, y luego envío una rama de master que no tiene el archivo secreto a github. ¿Habría una manera rápida y/o secuencia de comandos para ramificar siempre el maestro, eliminar todas las instancias del archivo secreto y luego empujar la rama a github? – Clay

+0

@Clay En teoría, puedes usar hooks (ganchos de google git) pero no hay forma de eliminar todas las instancias del archivo secreto de git (porque no puedes cambiar el historial de git). – Unapiedra

Cuestiones relacionadas