web-dev-qa-db-fra.com

Comment configurer un hook Git pour qu'après avoir poussé vers ssh: //[email protected]/~/bar.com.git, il ira à ~ / bar.com et fera un git pull?

On m'a conseillé de m'installer sur un serveur distant

foo.com/~/bar.com       # live webpage content
foo.com/~/bar.com.git   # a bare repo

donc, depuis ma machine locale, je peux faire un

git Push

et il poussera vers foo.com/~/bar.com.git sur la machine distante (le chemin complet est ssh://[email protected]/~/bar.com.git

Comment peut-on ajouter un hook , pour qu'après le Push, le serveur distant cd ~/bar.com et faites un git pull pour que tout le contenu soit mis à jour (comme la machine locale)? (pas besoin d'exécuter git update comme pour Mercurial?)

(ceci est lié à Impossible de cloner un dossier sur un serveur, puis de le modifier et de le pousser? pour le moment, je peux ssh vers foo.com et cd ~/bar.com et attendez là et faites un git pull chaque fois après un git Push depuis la machine locale, mais ce serait bien de le faire automatiquement)

Mise à jour : veuillez publier une réponse uniquement si vous connaissez des détails spécifiques et comment le faire. Si vous cherchez sur Google et que vous publiez le premier ou le deuxième résultat Google ici, cela n'aidera pas.

Mise à jour 2 : je suis allé à ~/bar.com.git/hooks et ajoutez un nouveau fichier post-receive avec le contenu:

#!/bin/bash

cd ~/bar.com
git pull ../bar.com.git master

et aussi chmod 755 post-receive, et si je modifie un fichier sur la machine locale, puis git com -m "ok" et git Push, il n'entraîne pas la modification dans le dossier de la machine distante ~/bar.com

37
nonopolarity

Vous pouvez ajouter un post-receive crochet au ~/bar.com.git repo pour cela. Pour ce faire, ajoutez à la ~/bar.com.git/hooks/ répertoire un fichier exécutable post-receive avec le contenu:

#!/bin/sh

unset $(git rev-parse --local-env-vars)
cd ~/bar.com
git pull

Assurez-vous que le post-receive le fichier a les bits exécutables (par exemple 755).

Maintenant, chaque fois que quelque chose est poussé vers le ~/bar.com.git repo, le ~/bar.com le dépôt est mis à jour automatiquement.

Voir également

pour comprendre pourquoi la suppression de certaines variables d'environnement est nécessaire.

56
Frank S. Thomas

J'utilise ce qui suit post-update script (assurez-vous de définir un bit exécutable dessus):

#!/bin/sh
rm -rf ~/public_html/xxx
git-archive --format=tar --prefix=xxx master | tar x -C ~/public_html

Il fait l'affaire, mais il y a une courte fenêtre lorsque le site n'est pas disponible. Faire git pull directement dans le vôtre ~/bar.com exposera le git .git, assurez-vous de le bloquer dans votre serveur http ou de conserver .git quelque part plus haut dans la hiérarchie des répertoires, ie. quelque chose comme:

~
 \
  - repo
    \
     - .git
     - bar.com
       \
        - your content
1
wolf