Tuto Git

Pour commencer, c'est quoi Git ?

C'est un logiciel de versionnage de fichier Et cela permet de travailler de manière collaborative sur un dépot, ou bien de retrouver le code tel qu'il était il y a x temps, maintenir différentes versions d'un logiciel en même temps. Il peut avoir pleins d'autres utilités (faites marcher votre imagination).

Le logiciel : Ligne de commandes (MultiOS).

vous pouvez le télécharger sur le site officiel c'est un outil particulièrement puissant utilisé en CLI, il est donc conseillé de le maîtriser ainsi avant de passer à des interfaces graphiques.

La configuration

exemple de fichier .gitconfig (UNIX : ~/.gitconfig, Windaube : %USERPROFILE%\.gitconfig)
    [user]
        name = Purexo
        email = ...[at]...
    [core]
        crlf = input
        safecrlf = true
        editor = nano
    [color]
        ui = true
    [alias]
        hist = log --graph --decorate --format=format:'%C(dim red)%h%C(reset) | %C(bold green)%ad%C(reset) | %C(white)%s%C(reset) %C(bold blue)[%an]%C(reset)%C(bold magenta)%d%C(reset)' --date=short
pour ajouter des settings : $git config --global groupe.variable valeur Exemple :
git config --global user.nom "Purexo"

Git : Les Bases

Un dépôt git peut être local, stocké dans le répertoire de travail, avec le projet distant, stocké ailleurs que dans le répertoire de travail (généralement sur un serveur)

Initialisation d'un depot

L'idéal est d'avoir un dossier vierge, donc on créé le dossier, on ce déplace à l'intérieur et on fait
git init #Initialise le dépôt git

Ajouts des fichiers au depot

git add Liste des fichiers à ajouter (séparé par des espaces)
Cette commande a pour but d'indexer les modifications dans le dépôt. (le caractère joker (*) peut être utilisé) Note : add peut etre remplacer par rm pour désindexer des fichiers (les supprimerons du dépôt)

Versionnage des fichiers

git commit -m "Message du commit"
Cette commande versionne les fichiers ou leurs modifications (Ajouts/Suppression/Modification), le -m permet de commenter le commit c'est obligatoire, si on ne précise pas le -m "message" git ouvrira un éditeur de texte.

Comparer les fichiers de répertoire de travail avec le dépôt :

git status
Cette commande retournera si le dépôt est cohérent avec le répertoire de travail.

L'historique de Git

git log
Cette commande très brut permet de retourner l'historique des commits dans les dépôts, avec les modifications effectué et par qui. $ git log --pretty=oneline # affiche un commit par ligne Il est conseillé de rendre plus lisible l'affichage via les options que l'on peut lui passer, pour cela je vous propose d'utiliser l'alias du .gitconfig fournis plus haut. (ou de faire le votre en suivant la doc, bon courage ;-) )

Gestion du dépôts

Grâce à Git on peut naviguer dans la time-line du code, switcher d'une branche à l'autre, écraser un ancien commit. Git nous laisse une gestion total du WorkFlow.

Retrouver une ancienne version

La commande checkout, rappel la commande log permet de récupéré les hash des différents commit qui servent d'identifiant.
git checkout
Permettra de mettre à jours le répertoire de travail vers le commit précisé. Pour retourner à la dernière version :
git checkout master
 

 

Tagging de version

une version (un commit) peut être taggé pour être retrouvé plus facilement ou pour marquer une version logiciel etc... Pour cela deux possibilité :
git tag "nom du tag souhaité" # tagera le commit courant
git tag "Nom Tag" # tagera le commit précisé via son hash
Grace à ce tag, on pourra checkout via le nom du tag plutôt que via le hash du commit.
git checkout "Tag Name"

Modification du dernier commit

Parfois on fait un commit, et on ce rend compte qu'on à oublié un petit truc. Plutôt que de faire un commit supplémentaire pour si peu, on va modifier le précédent grâce à $git --amend

Annulation de modification (avant un commit)

A cause d'une erreur de manip, ou n'importe quoi d'autre, on veut annuler des indexations non comité
$git reset HEAD

Annulation d'un commit

git revert HEAD #Créera un commit pour annuler le précédent

Les branches

Les branches servent servent à développer de nouvelles fonctionnalités, debugger une version logicielle spécifique. séparer le code de plusieurs personnes pour ne pas avoir de problèmes de conflit lors de la mise a jours du dépôts distants. Après vous êtes libre de faire ce que vous en voulez ;-)

Quand / Pourquoi créer une nouvelle branche

  • Ma modification sera-t-elle rapide ?
  • Ma modification est elle simple ?
  • Modification faisable en un seul commit ?
Si la réponse est non : nouvelle branche. la gestion des branches sous git est très simple donc pas de stress

Création et navigation entre les branches

git checkout -b newBranche
La commende checkout sert à changer de branches, l'option -b permet de créer la branche pour switcher dessus.

La fusion de branches

git checkout newbranche # On s'assure de bien etre sur la branche que l'on souhaite fusionner vers une autre
git merge master # Fusion vers la branche de destination master.

Le(s) dépôts distants

Le dépôts distant servira de référence à tout l'équipe c'est sur lui que serons rapatrié les commit à la fin pour que tout le monde puisse ce synchroniser.

1) Importer le dépôt !!!

git clone URLduDepot nomDepotLocal
nomDepotLocal est optionel, si il n'est pas donné, le nom de dossier local seras par défaut le nom du dépôt distant (tout en minuscule) l'URL peut être en http, https, ssh, ou un chemin relatif ou absolu si le dépôt "distant" ce trouve sur la machine

2) Synchronisation

Télécharger les mise à jours du dépôt distant

git fetch
git merge origin/master # technique un peu chiante et fastidieuse
ou
git pull # Technique pratique

Uploader les mise à jours local vers le dépots distant

git push

3) Éviter les conflits

Pour cela, l'utilisation des branches fait sens et est préconisé sinon on peut aussi utiliser :
git pull --rebase #met a jours le depot local sans réécrire sur les modif local
git push

Les interfaces graphiques :

Sous Windows

Je conseil TortoiseGit qui fonctionne via le menu contextuelle de l'explorateur de fichier Mais il en existe pleins, cherchez un peu ;-)

Sous Linux

La ligne de commande c'est bien, c'est agréable sous Linux de taper des commandes ^^. Plus sérieusement j'ai pas trouvé d'interface aussi satisfaisante que tortoise sous linux. mais SmartGit m'a l'air bien fichus.

Sous Mac

C'est des petites baffe derrière la tête que tu veux c'est ça ? Franchement j'en sais rien elles sont souvent payante sur mac peut être parce-que les gens qu'on un mac c'est des pigeons riches ?, SmartGit est MultiOS et gratuite (Windows Mac et Linux)

Sources :

Mes connaissances personnelles