post_receive hook in git: ¿cómo se comtesting mi carpeta non-git?

Estoy usando webfaction para mi web deployment .

Tengo una aplicación de Django en: webapps / django_app / project_name /

Tengo un repo de Git en: webapps / git_app / repos / my_repo.git

my_repo.git es un repository simple. No es un directory de trabajo.

cada vez que presiono desde mi computadora de desarrollo local hasta el control remoto (webfaction -> my_repo.git), quiero que mi django_app obtenga el código insertado.

Seguí esta publicación que funciona bien. Pero no se da ninguna explicación de cómo funciona esto.

He agregado estas dos líneas en el gancho post_recieve en my_repo.git.

 #!/bin/sh GIT_WORK_TREE=/home/username/webapps/django/myproject git checkout -f GIT_WORK_TREE=/home/username/webapps/django/myproject git reset --hard 

¿Qué hacen realmente estas dos líneas?

Además, mi carpeta Djangoapp no ​​es un git repo. aún cuando se realiza una inserción en my_repo.git, Djangoapp se actualiza. ¿Entonces, cómo funciona?

Cuando gestiona files localmente con .git , generalmente tiene dos cosas:

  • Su repository de git, que está en el directory .git , y
  • Su tree de trabajo, que es el set de files que realmente está editando.

Por defecto, el repository es un subdirectory del tree de trabajo, pero esto no es un requisito. Establecer la variable de entorno GIT_WORK_TREE indica a git que use una location diferente para sus files de salida.

Entonces la primera línea …

 GIT_WORK_TREE=/home/username/webapps/django/myproject git checkout -f 

… está pidiendo a git que revise el HEAD del repository en /home/username/webapps/django/myproject .

La segunda línea …

 GIT_WORK_TREE=/home/username/webapps/django/myproject git reset --hard 

… se asegura de que /home/username/webapps/django/myproject no tenga ningún cambio local. reset --hard descarta cualquier cambio en los files que son rastreados por git. Con "cambios locales" me refiero a cualquier cambio que usted u otra persona haya realizado en los files de este directory; idealmente, no habrá ninguno, pero si hubo alguno allí, reset -f se asegura de que los files modificados se sobrescriban con la versión del file almacenada en el repository.

Para get más detalles sobre cualquiera de los commands enumerados aquí, intente ejecutar git <command> --help para la página man, o vea The Git Book .