2011-10-21 13 views
10

Desarrollo algunos scripts para manejar mis bases de datos bibtex y archivos PDF.git push only parte de un repositorio

Para mayor comodidad, administro tanto la base de datos como los scripts en el mismo repositorio de git (algo que no quiero cambiar). Sin embargo, me gustaría que mis scripts estén disponibles (por ejemplo, en github) pero no en mi base de datos o pdfs. Aún así, quiero tener el mismo historial de confirmación tanto en github como localmente para los scripts.

Pensé en tener una github-branch y empujar solo esta rama. Pero, ¿cómo actualizaría la rama con las confirmaciones hechas a los scripts en la rama principal?

¿Hay alguna otra forma de hacerlo?

Respuesta

1

Pero, ¿cómo podría actualizar la rama con los commits hechos a los scripts en la rama principal?

Cherry-pick las confirmaciones correspondientes a las secuencias de comandos desde master en la rama pública. O bien, edite los guiones en su propia rama, luego fusione los cambios en master cuando los necesite.

+0

, pero ¿no sería solo recoger los cambios realizados por este compromiso? Supongamos que hice varios commits en master, algunos relacionados con el db y otros en los scripts. Tendría que asegurarme de elegir todos los relacionados con los scripts, ¿no? (No solo el último). Creo que la branch-with-merge separada es la mejor alternativa ... – thias

+0

@thias: es por eso que recomendaría desarrollar los scripts en la rama pública en lugar de 'master'. O usando repositorios separados ... –

+0

bien, yo uso una rama separada ... – thias

9

Puede usar git subtree para dividir el directorio de scripts en su propia bifurcación (con el historial completo para ese subdirectorio) que luego puede enviar a GitHub. Puede ejecutar el subárbol de git nuevamente para mantener el depósito dividido actualizado.

Para dar un ejemplo, una vez que haya instalado git subtree que puede hacer:

git subtree split --prefix script-directory --branch just-scripts 
git push github-scripts just-scripts:master 

... suponiendo que las secuencias de comandos están en script-directory y github-scripts es un control remoto que apunta a la URL de su GitHub repositorio destinado solo a los scripts.

+0

¡Eso parece interesante! Pero, ¿cómo actualizaría la nueva rama? ¿O simplemente lo eliminaría después de presionar y ejecutar los comandos nuevamente para el próximo empujón? – thias

+0

Puede ejecutar el mismo comando nuevamente sin eliminar la rama y debería actualizarlo (creo). –

+0

@Mark, solo pregunto, ¿es posible hacer esto en una línea? Algo así como git push --split subDir - en aras de la simplicidad. – shabunc

1

Seguí el consejo dado por @larsmans y me resultó muy conveniente. Éstos son algunos detalles más para el procedimiento:


## getting the scripts into a separate branch for github 

# create a root branch 'scripts' 
git symbolic-ref HEAD refs/heads/scripts 
rm .git/index 
git clean -fdx # WARNING: all non-commited files, checked in or not, are lost! 
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts" 
git checkout master 
git merge scripts 

# push the scripts branch to github 
$ git remote add github [email protected]:username/repo.git 
$ git push github scripts 

Ahora puedo desarrollar en el scripts de la sucursal y fusionarse con la rama principal cuando lo necesito para mi base de datos.

Una advertencia: la primera fusión después de agregar un nuevo archivo que está en ambas ramas dará lugar a un conflicto (porque la rama de scripts es una raíz-rama). Por lo tanto, es mejor obtener los scripts de la rama principal y enviarlos de inmediato.