le Journal du Floyd

Un peu de Git privé...à la salope

mon oeil

Git, c' est un logiciel libre qui permet normalement de travailler à plusieurs sur un site Web, un projet de développement. Chacun apporte ses modifs, importe celle des autres. Dans l' absolu, on regarde d' abord si y a pas eu une modif de faite, pis on envoie ses modifs ou ses nouveaux fichiers depuis son ordinateur sur le serveur. On procède par étapes. Pour commencer, on regarde la possibilité de se connecter en ssh sur son serveur Web depuis un terminal. Un truc du style :

ssh utilisateur@nom_de_domaine.com

A voir avec son hébergeur au cas où. Bon, je me connecte sur le serveur. Je suis à la racine de mon arborescence Web, avec mes fichiers. Je fais quoi? Soit je morcelle par catégories, ou alors l' ensemble (c' est mieux le tout, sinon bonjour la galère). Dans un terminal, à la racine de mon site, je tape :

:~$ git version

Ah, super, il me donne la version, y a git sur le serveur, je continue.

:/www$ git init

Il me rajoute un dossier .git, là ou j' ai tapé git init dans mon arborescence (là. c' est à la racine). Maintenant, je vais ajouter mes fichiers (ou objets). Soit j' ajoute tout, soit uniquement les fichiers qui seront modifiés. Dans mon cas, il y a des fichiers que je ne veux pas modifier, mais bon. Normalement, on ajoute tout :

:/www$ git add .

Ou alors à la main comme les romains :

:/www$ git add index.html news/ sports /rubriques/ etc...

Maintenant, je vais faire la petit commission, ça va me faire du bien :

:/www$ git commit -m "1er commit"

En quelque sorte, j' ajoute mes fichiers/dossiers et je confirme par un commit (-m pour message). Côté serveur, je suis bon. Je me déconnecte. J' installe Git sur ma machine, si c' est pas encore fait:

:~$ sudo apt-get install git

Puis je configure :

:~$ git config --global user.name "mon nom ou mon surnom"
:~$ git config --global user.email nom@gmail.com
:~$ git config --global color.ui true #un peu de couleur, que diable!
:~$ git remote add origin utilisateur@nom_de_domaine.com:/.git #bah oui, dis-lui d' où ça vient au Git

Je me choisis un endroit préféré sur ma machine et j' importe mes fichiers/objets :

:/documents/repository$ git clone ssh://utilisateur@nom_de_domaine.com:/.git

Attention aux 2 points après le nom de domaine, et ensuite on met le chemin (le path) jusqu' au .git. A partir de là, je peux mettre à jour les modifications faites par les autres ou à partir d' autres ordinateurs par un git pull. Pour envoyer mes modifs ou nouveaux fichiers :

:/documents/repository$ git add rubriques/chiens_écrasés/nouveau.html
:/documents/repository$ git commit -m 'mon premier envoi'
:/documents/repository$ git push origin master # ou simplement git push

Possible que le push ne fonctionne pas. Sur le serveur, il n' y a qu' une branche déjà active. Pour résumer, mettre à jour une branche de production directement, le Git, il aime pas :

remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.

Retour sur le serveur :

ssh utilisateur@nom_de_domaine.com
:/www$ git branch # liste les branches, y en a qu' une seule, master
:/www$ git branch copie_de_travail # création d' une branche de travail
:/www$ git checkout copie_de_travail# je bascule sur la branche de travail

De retour sur ma machine, je peux faire mon git push. Pour avoir les 2 branches identiques sur le serveur :

ssh utilisateur@nom_de_domaine.com
:/www$ git merge master # si je me trouve sur copie_de_travail
:/www$ git merge copie_de_travail # si je me trouve sur master

Voilà.... enfin presque, Git est beaucoup plus complet, certains conflits ou difficultés doivent se résoudre à la main. Git offre également beaucoup plus de possibilités que ce genre de bricolage.