Bifurcar usando Stash en el server web y agregar files desde otro repository

Soy nuevo en git y necesito ayuda. Mi plan:

  1. Tengo repository de debug
  2. Tengo un repository de documentos
  3. Quiero fork de Debs a la carpeta www
  4. Agregar files del repository de documentos con nombres y directores modificados
  5. Luego quiero fusionarme de la carpeta debs y la carpeta docs modificada en la carpeta www
  6. En el server web quiero extraer automáticamente la carpeta www con cron para actualizar el repository de Deb

Yo uso Atlassian Stash, veo que hay una forma en que puedo pasar de la carpeta Deb a la carpeta www. Y cuando cambio algo en el directory debs, automáticamente empujará los cambios a la carpeta www. ¿Es verdad?

Quiero hacer un script que automáticamente haga las partes 4. 5. y 6.

¿Cuál sería la mejor manera de hacerlo?

1) Tengo un repository de Debs

Supongamos que la URL para esto es git@github.com:user/debs.git

Estamos utilizando la url de ssh , para que todo el process de extracción pueda automatizarse en el server. Las ssh-keys pueden ser elegidas por git , a diferencia del username-password que debe proporcionarse siempre sobre las conexiones https , y las keys ssh son mucho más fáciles de configurar que el almacenamiento en caching de passwords.

Esto supone que ya tiene configurada su key ssh. Echa un vistazo a estas publicaciones en bitbucket y github para hacer lo mismo.

2) Tengo un repository de documentos

Supongamos que la URL para esto es git@github.com:user/docs.git

3) Quiero que tenedor de Debs a la carpeta www

Esto debería ser simple: diríjase a su location de www y use git clone para crear una copy local de la misma.

 cd www git clone git@github.com:user/docs.git 

FWIW, bifurcar no es el término correcto aquí, es relevante solo para crear copys del repository en bitbucket, github, etc. de una count de usuario a otra.

En caso de que desee que este clon se nombre como www , es decir, que todo el código se coloque dentro de www direcotry, y no dentro del directory www/debs , use

 cd path_to_www_parent git clone git@github.com:user/docs.git www 

4) Agregar files del repository de documentos con nombres y directores modificados

Si necesita cambiar los nombres de los files cada vez, sugeriría clonar el repository de Debs en alguna location, cambiar el nombre de los files y luego moverlos.

De lo contrario, si los nombres y la ruta del directory de los files son los mismos que en el git repo, puede agregar directamente el repository de documentos como un submodule de git dentro del repository de debs , o tenerlo como un subtree dentro de él.

Recomendaría mantener los nombres de los files, etc. para que su repository de git sea una copy de trabajo del código, sin necesidad de alteraciones en la extracción, etc. de esa forma se puede usar directamente como un submodule y no tendremos que preocuparnos por ese script de cambio de nombre de file.

5) Luego quiero fusionarme de la carpeta debs y la carpeta docs modificada en la carpeta www

Ya nos ocupamos de eso en los pasos anteriores, la forma ideal de hacerlo sería tener la siguiente estructura en su caso en lugar de jugar manualmente con el código.

 debs #can be the www folder as well |_code_file_for_debs_1 |_code_file_for_debs_2 |_code_file_for_debs_3 . . |_docs #is a git submodule 

6) En el webserver quiero extraer automáticamente la carpeta www con cron para actualizar el repository de Deb

Una vez que haya agregado los modules de la manera anterior, un simple git pull los actualizará. El trabajo cron podría ser un script simple como el siguiente

 cd www git pull service apache2 graceful #assuming apache is webserver 

Y esto se puede progtwigr como un trabajo cada 15 minutos como follow (abrir crontab usando crontab -e )

 */15 * * * * sh script.sh 

o

 */15 * * * * cd www && git pull && service apache2 graceful 

Yo uso Atlassian Stash, veo que hay una forma en que puedo pasar de la carpeta Deb a la carpeta www. Y cuando cambio algo en el directory debs, automáticamente empujará los cambios a la carpeta www. ¿Es verdad?

No, nada se presionará automáticamente. Necesitarás agregar los files modificados usando git add , y luego confirmarlos, y luego enviarlos a tu bitbucket / github repo. Podemos configurar un repository simple en el server y comenzar a presionarlo, pero eso no alterará ningún otro de los pasos anteriores. Verifique mi respuesta a otra pregunta aquí para get una mejor comprensión de la configuration de repos sin formatting.


PD

Si bien esta configuration debería funcionar, debe investigar el uso de capistrano u otras herramientas similares para las implementaciones en lugar de confiar completamente en las tareas de cron para hacer lo mismo por usted. La ventaja de los scripts de cap es que solo tienen que ejecutarse cuando necesita realizar una implementación, por lo que su server no está perdiendo ciclos de CPU; puedes implementar en múltiples serveres simultáneamente; puede solucionar problemas fácilmente debido a fallas en la git pull etc.