git GIT_WORK_TREE control de implementación de enlace post-recepción

Estoy tratando de usar este gancho post-recieve para actualizar mi server en vivo

GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Este enlace está en el repository remoto remoto y me gustaría que el tree de trabajo en vivo esté en un server diferente.

¿Cómo configuro esto para que cuando el gancho se dispara compruebe los files en el server activo, se transfiera desde el server remoto al server activo? ¿Dónde lo defino?

Esto es lo que bash configurar

http://www.dejaaugustine.com/2011/05/leveraging-git-as-a-full-fledged-web-development-tool/

pero vivo y testing en serveres separados para el repository desnudo, pero en lugar de usar git pull iba a usar git checkout -f .

La siguiente solución actualiza una base de código de server en vivo con el código de un repository desnudo en otro server. Esta solución no utiliza scp o copy files para sobrescribir en el server en vivo, porque queremos evitar sobrescribir un directory completo (con git podemos elegir qué queremos actualizar).

Suposiciones

  • Está empujando su código a un repository simple en un server de testings / etapas (o podría ser solo un server para alojar su repository "centralizado")
  • Desea actualizar su server en vivo con el código en este repository simple
  • Su server en vivo está en un server diferente de lo que necesita.

En el server en vivo:

  • Configure un repository de git no simple que aloje los files en vivo: cd /var/www/www.yoursite.com && git init
  • Desde este server en vivo, asegúrese de tener acceso ssh al server donde está su repository simple, usando ssh-keys (no cubierto aquí)
  • Agregue el repository "centralizado": git remote add origin git@testserverip:/path/to/repo.git
  • Ahora, cada vez que desee actualizar la base de código del server en vivo, puede ejecutar el git fetch origin seguido de git merge

Dado que este es un server en vivo, normalmente no desea que ningún conflicto de combinación cause problemas. Si no le importa perder cambios en el server en vivo (porque probablemente nunca cambie nada importante en el server en vivo), puede usar git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server

Un escenario típico es que tiene otros files (files temporales, files modificados por el usuario, etc.) en el server activo que no desea sobrescribir). Asegúrese de agregar todos estos files / directorys a su file .gitignore y asegúrese de que no sean agregados por git add. De esta forma, no se verán afectados cuando se retire el código de su repository centralizado.

Si desea que esta configuration sea más automática, cree un script bash en el server activo:

 git fetch origin git merge -m 'Overwriting live server' -s recursive -X theirs origin/active-branch-on-live-server 

Haga este script como un script bash ejecutable (no cubierto aquí). Ahora, puede invocar este script desde un script hook en el server "centralizado", para que el server activo se actualice cada vez que inserte su código.

En el server repo / test / staging "centralizado":

(Ya debe tener un repo al descubierto configurado aquí, si no crearlo).

En su bare-repo.git / hooks / create / edit el file de post-receive , para que el server en vivo ejecute el script creado arriba cuando el código es enviado al repository simple:

 #!/bin/bash while read oldrev newrev refname do branch=$(git rev-parse --symbolic --abbrev-ref $refname) # Use this if-sentence to only update live server if branch is the wanted branch, eg master or stable if [[ "stable" == "$branch" ]]; then # Fetch this branch from live-server ssh root@ip-to-live-server '/path/to/script-created-above' fi done 

Asegúrate de que el usuario de git en tu server que aloja tu repository simple tenga acceso a tu server en vivo a través de ssh-keys, para que funcione el ssh en el script anterior.

Esta es una descripción esquemática. Los detalles se pueden encontrar en otros lugares:

  • Acerca de sobrescribir files en un server en vivo: http://sofes.miximages.com/a/10113231/1030104
  • Usando gitignore: Ignorando directorys en repositorys Git en Windows
  • Usar una secuencia de commands gancho post-recieve para reactjsr en una twig determinada: Escribir un gancho post-recepción de git para tratar con una twig específica

Tendrás que actualizar tu gancho de post-recepción para get los files de la carpeta de pago en tu server de git y enviarlos a tu server en vivo.

 GIT_WORK_TREE=/home/temp git checkout -f scp -r /home/temp user@liveserver:/var/www/www.example.org 

Puede configurar un repository desnudo en serveres de testing / en vivo e impulsarlos con un enganche posterior a la recepción desde el repository de origen principal. Luego, vuelva a utilizar el gancho post-recepción para pagar en el directory web.

O use rsync para el repository de origen principal para vivir / probar serveres. (Tenga cuidado con el retraso de time).