¿Cómo enviar a un control remoto solo algunos directorios o archivos? en git

Estoy usando heroku para desarrollar una aplicación Django y ellos usan git para empujar el código. Mi problema es que necesitan esta estructura de archivos:

heroku_project/
     requirements.txt (this a pip requirements file)
     procfile (this file tell heroku how to run your app)
     django_project (the project itself)
     lib
     bin
     build
     lib (these 4 folders belong to my python virtual env)

Así que tengo que inicializar mi git en esta carpeta, por lo que esto significa que hay estos archivos adicionales:

heroku_Project/
     .gitignore
     .git

Según sus instrucciones dentro .gitignore debería haber estas líneas:

bin
build
include
lib
.Python
*.pyc

El problema es que quiero rastrear esas carpetas env virtuales, porque a veces instalo Python solo para probar y las descarto más tarde, o hago cambios experimentales en ellas y desearía poder deshacer esos cambios usando git, mi pregunta es cómo puedo Realizo un seguimiento de estas carpetas, así que necesito eliminarlas del .gitignore. El problema es cuando lo hago

git push heroku master

Como esto empujará esas carpetas y no queremos eso, entonces, ¿cómo puedo empujar selectivamente archivos y directorios? ¿O qué tipo de flujo de trabajo utilizaría para resolver este problema?

Muchas Gracias

preguntado el 06 de noviembre de 11 a las 15:11

2 Respuestas

En primer lugar, si está realizando un desarrollo activo en Heroku, es posible que esté muerto en el agua. Pero si está desarrollando en su máquina local, las sucursales pueden ayudarlo.

Mi consejo para ti sería crear una rama separada para implementar código en heroku. En este escenario, podría usar la rama maestra para el desarrollo activo y mantener esas carpetas del entorno virtual allí, y tener una rama separada (por ejemplo, "producción") para implementar el código en heroku.

Cuando esté listo para lanzar una nueva versión de su código, debe cambiar a la rama de producción, fusionar los cambios del maestro, eliminar esas carpetas del entorno virtual y luego presionar a Heroku. En la práctica, esa secuencia de comandos se verá así.

$ git checkout production
$ git merge master
$ rm -Rf bin build include lib .Python *.pyc
$ git commit -a -m "Cleanup for production."
$ git push heroku production

Parece que será la mejor solución de trabajo. Algunos vectores que puede que desee examinar por su cuenta:

  • Formas de automatizar el proceso de eliminación de archivos mediante scripts de shell y git hooks.
  • Para asegurarse de que Heroku pueda usar una rama que no sea "maestra" para ejecutar código (creo que debería poder hacerlo).
  • Para ver si es posible utilizar diferentes .gitignore archivos en diferentes ramas y, de ser así, si eso eliminará o no el proceso de limpieza de eliminar esos archivos manualmente.

¡Espero que esto ayude!

respondido 06 nov., 11:20

Gracias por la respuesta, sí, estoy haciendo desarrollo local. Tenía miedo de que se necesitara un cambio en el flujo de trabajo, pero creo que puedo automatizar esto con scripts de estructura o shell. - Guillermo Siliceo Trueba

¿Por qué no lo intentas? virtualenvwrapper? Separa virtualenv de su entorno de desarrollo. El escenario típico es que trabaje en un virtualenv, digamos "main_env".

 mkvirtualenv main_env

Y cuando necesite otro para probar, puede hacer

mkvirtualenv test_env

y puedes cambiar entre ellos con un comando: workon [name]. Realmente no deberías mantener esos archivos en git. Simplemente no están relacionados con el proyecto. Y gracias a virtualenwrapper, no necesitas git para cambiar entre esos entornos virtuales.

Si insiste en mantenerlos, bueno, simplemente NO puede organizarlos en git. Si no agrega un archivo / carpeta con git add, no se enviará al servidor.

respondido 06 nov., 11:21

Lo pensé, pero tuve una pesadilla al hacer malabares con la ruta de Python para virtualenv, vim y ipython, que quiero evitar jugar con ella usando un virtualenv diferente. - Guillermo Siliceo Trueba

Bueno, entonces claramente algo andaba mal :) Configurar virtualenvwrapper es muy, muy fácil y se explica en detalle (solo revisa las instrucciones de instalación y compruébalo por ti mismo). Si tiene ipython instalado, ejecute manage.py shell iniciará el shell ipython configurado por django. Simplemente funciona. - Jakub Gocławski

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.