Déployer GIT de local vers distant

Contexte :

On développe en local avec GIT...super !

Maintenant on va :

Créer un serveur de rencontre pour pouvoir bosser a plusieurs, et cerise sur le gâteau, intégrer tout ça à Redmine

Créer un serveur de rencontre pour pouvoir bosser à plusieurs:

Tout est là :
http://www.grafikart.fr/blog/deployer-site-git

Étape 1 : Préparer le serveur

Pour commencer il faut préparer le serveur, on se connecte en SSH (si vous êtes sur windows vous pouvez ajouter le dossier bin de msysgit à votre path, il contient la commande ssh)

ssh user@monserveur.fr 

Si vous ne l'avez pas vous

sudo apt-get install git 

Ensuite on va créer le dépot qui servira de "hub" ce dépôt servira de dépôt distant et permettra de lancer le déploiement lorsqu'il recevra une modification.

git init --bare MonProjet.git 

Etape 2 : Premier push

Maintenant vous revenez sur votre ordinateur et on va envoyer nos première modificiation sur le serveur, je part du principe que vous versionnez déjà votre projet avec git et que vous avez déjà fait quelques commit.

On ajoute donc le dépôt distant et on le nomme "origin"

git remote add origin ssh://user@monserveur.fr/home/user/MonProjet.git 

On push nos modifications en ligne et on push la branch master

git push origin master 

Étape 3 : Créer le dossier accessible par Apache

Donc vous avez votre dépôt qui est bien remplie mais votre site n'est toujours pas visible. On va donc cloner le dépôt dans le dossier www d'apache et on va nommer notre site Production.

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

Et là votre site fonctionne ! Mais maintenant il faut automatiser un peu tout ça pour qu'au prochain push votre site se mette à jour tout seul comme un grand. Il faut détecter les push qui seront fait sur le dépôt git afin de déployer automatiquement le modifications. Pour cela on va créer un *hook * au niveau de notre dépôt.

vi /home/user/MonProjet.git/hooks/post-update 

Et on ajoute le code suivant :

#!/bin/bash 
echo
"********** mise en production *********"
cd /var/www/Production
unset GIT_DIR
git pull origin master

Et on s'assure que ce fichier est exécutable :

chmod +x /home/user/MonProjet.git/hooks/post-update 

C'est relativement simple. Dès qu'on a une modification du depôt on va se placer dans le dossier contenant notre site et demander un pull de la branche master. Si vous souhaitez publier une autre branche dans un dossier séparé il vous suffit de refaire cette étape en créant un autre dossier dans www et d'ajouter une autre routine dans le hook post-update.

Si vous rencontrez cette erreur :

fatal: remote origin already exists,

La solution est là :

stackoverflow.com/questions/1221840/remote-origin-already-exists-on-git-push-to-new-repository

Pour info, en ce qui nous concerne :

git remote rm origin

ISP config :

A noter, pour pouvoir modifier le contenu des autres répertoires que web et private, il faut faire :

chattr -i /var/www/clients/clientXX/webXX

et

chattr +i /var/www/clients/clientXX/webXX

après ;)