Les merveilles de Git et les joies du merge d'un repository distant dans un repository git local

Ce billet aura pour vocation de vous faire découvrir Git ou plutôt de vous familiariser avec vos forks GitHub. (Et également démarrer l'année 2010) Je n'ai pas la prétention d'être le root comme Linus Torvalds (Créateur de Git), néanmoins, je vais vous faire part de mon expérience avec Git.

Git ? kézako ?

Git est un système de versioning décentralisé. En effet, même si le repository principal est présent sur GitHub par exemple, chaque personne qui a cloné (sous entendu fait une copie du repository initial sur son disque dur) le repository sera totalement autonome dans sa manière de développer ou de faire évoluer l'application.

Pour comprendre à quoi ça sert, un petit cas pratique.

Vous êtes dans une entreprise et vous vous échangez des fichiers textes ou autres. Malheureusement, Bob (Sacré Bob !) à supprimer le fichier compta2009.doc du serveur...Comment récupérer ce fichier me direz-vous ? Employez un logiciel de récupération de données, ou aller chercher les copies de sauvegardes (n'ayant pas été faite depuis 1998 ou tout simplement n'étant pas présent dans l'entreprise)

Avec Git, chacun des employés auraient eu la même chose localement sur son poste, et quand ils finissent son travail, ils envoient (push) les données modifiés vers le repository master. Même si Bob push ses données et supprime le fichier "compta2009.doc" nous aurons toujours moyen de revenir en arrière dans l'historique.

Autre cas pratique, une entreprise de développement.

Vous êtes dans une équipe de développeurs, mais vous ne savez pas comment vous répartir les tâches de développement, combien de fois on a entendu "Arf ! je viens de modifier ce fichier, et toi tu as remis l'ancienne version avec ta modification !"

Grâce à Git, fini les problèmes, chaque personne modifie les fichiers, et ensuite on passe à la partie "diff" ou du moins, on compare les modifications et on affine au fur et à mesure.

Pour plus d'informations, je vous invite à lire Wikipedia

Initialisons ensemble notre premier repository

Pour initialiser un repository, il vous faut tout d'abord les outils pour le faire

sudo apt-get install git-core

Maintenant, créons un répertoire et initialisons un repository Git

mkdir test_git
cd test_git
git init
Initialized empty Git repository in /home/user/test_git/.git/

Et voilà, vous avez un repository git fonctionnel.

Si on y ajoute un fichier

touch README
echo "mon premier repository !" > README

Votre repository n'a toujours pas pris en compte votre fichier "README" Pour prendre en considération le fichier, il nous faut l'ajouter au repository et cela se fait en plusieurs étapes.

Etape 1, on ajoute le fichier.

git add README

Etape 2, on prépare le commit (Description succinctes des modifications et inscription des modifications dans l'historique de Git)

git commit -m "Mon premier commit"
[master (root-commit) 1f85553] Mon premier commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 README

Etape3, on envoie les modifications.

git push

Et voilà, vous avez envoyés vos modifications.

Si un utilisateur veux récupérer vos modifications, rien de plus simple.

git clone /home/user/test_git/ /home/user2/git_user2
Initialized empty Git repository in /home/user2/git_user2/.git/

Maintenant, imaginons, quelqu'un a pusher des informations sur le repository, ils vous faut "prendre" la dernière version du repository avant de faire un push

git pull

Git pull a pour vocation de récupérer l'ensemble du repository.

Merge d'un repository distant dans un repository git local

Vous avez un repository distant et vous voulez merger les modifications dans votre branche.

Pour se faire, prenons et clonons un repository distant, par exemple, celui de Thinking Sphinx

git clone git://github.com/freelancing-god/thinking-sphinx.git

On fois ceci fait, on fait donc, créer notre repository local

git init

On récupère le clone du repository distant et on crée le branche "original" correponds à la branche master distante.

git fetch /home/mon_user/thinking-sphinx/ original
git checkout original
git pull

Il ne nous reste plus qu'a merger les modifications de la branche "original" dans la branche "master" courante.

git checkout master
git merge original
Vus : 1087
Publié par Mickaël : 9