Vous êtes sur la page 1sur 38

GIT Présentation

Gestionnaire de version

- Enregistre les évolutions d’un fichier


- Permet de revenir à une version précédente
- Fonctionne avec tout type de fichiers
- Permet de retrouver un fichier supprimé
Version locale
Version centralisée
Version distribuée
GIT Présentation
GIT Présentation
GIT vérifie que tous les fichiers soient présents à l’aide d’une somme de contrôle,
une signature unique qui servira de référence

Impossible de perdre un fichier dans GIT sans que lui-même ne s’en aperçoive

Les sommes de contrôle sont en SHA-1 (hachage cryptographique)

Les fichiers auront 3 statuts :

- Validé : Sauvegardé sur la BD


- Modifié : Fichier modifié mais pas encore sauvegardé (données perdues si plantage)
- Indexé : Marqué pour être envoyé sur la BD
GIT Installation sous Linux
Généralement présent sur le paquet de distribution sous le nom de ‘git’

Sur fedorat : dnf install git-all

sur Debian/Ubuntu : apt install git

Liste des distributions sur :

https://git-scm.com/download/linux
GIT Installation sous Windows
Pour Windows :

http://git-scm.com/donwload/win

Suivant

Suivant
GIT Configuration
Outil : git config pour modifier la configuration

Au niveau Système : /etc/gitconfig , modifiable avec git config --system


Au niveau utilisateur : ~/.gitconfig , modifiable avec git config --global
Au niveau projet : .gitconfig , modifiable avec git config

chaque niveau surcharge le précédent


GIT Configuration Identité

Renseigner le nom et une adresse email

$ git config --global user.name ‘’Guillaume CRENN’’


$ git config --global user.email ‘’gcrenn@ajc-formation.fr’’

Le paramètre global permet de rendre cette configuration valide pour tous les projets
GIT créer un Dépôt

Initialiser un dépôt git :

$ git init

Un dossier .git est créé mais rien pour l’instant n’est versionné
GIT cloner un Dépôt

Récupérer un dépôt existant :

$ git clone

Cela permet de recevoir une copie de quasiment toutes les données stockées sur le serveur
S’il y a un problème avec le disque serveur, on aura une copie complète du projet

git gère les protocoles http:// et https:// mais aussi git://server.tld/projet.git


Ce dernier protocole se base sur le SSH
GIT nouveaux fichiers sous suivi de version

Pour suivre un nouveau fichier :

$ git add nomdufichier

Pour avoir le suivi des fichiers :

$ git status

Le fait d’ajouter un répertoire ajoutera récursivement tous les éléments à l’intérieur


GIT ignorer des fichiers

Pour ignorer des fichiers et ne jamais les ajouter à git :

Rentrer la liste des fichiers dans le fichier .gitignore

les fichiers ne seront plus présents dans le git status

$ cat .gitignore

*.[oa]
*~
GIT ignorer des fichiers

Les lignes vides ou commençant par un # sont ignorées

Les patrons standards de fichiers sont utilisables

Si le patron se termine par un slash (/), cela indiquera un répertoire

Un patron commençant par un point d’exclamation (!) indique des fichiers à inclure
malgré les autres règles en vigueur

exemple de fichiers gitignore :

https://github.com/github/gitignore
GIT Inspecter les modifications

Pour avoir une vision plus précise des changements faits sur les fichiers :

$ git diff

Cela permet de savoir qu’est ce qui a été modifié mais pas encore indexé
Quelle modification a été indexée et est prête pour validation

git diff montre les changements ligne par ligne

Pour voir les modifications de la prochaine validation :

$ git diff --cached


GIT Valider les modifications

Rappel, ce qui n’est pas dans git add ne fera pas parti de la prochaine validation

la commande pour valider :

$ git commit

Les options importantes :

-v : ajoute le diff dans le commentaire


-m ‘commentaire’ : pour ajouter un commentaire sans passer par l’éditeur de texte

Une fois finie, la validation a un ID (SHA-1)


GIT Mise en Index

La gestion de la zone d’index peut être longue si on ajoute tous les fichiers un par un

git commit –a dit a git de placer tous les fichiers déjà suivis dans la zone d’index
GIT Effacer ou déplacer un fichier de git

Pour effacer un fichier de git, vous devez l’éliminer des fichiers en suivi de version
(l’effacer de la zone d’index et valider)

Si vous effacez le fichier avec rm


Il apparait sous la section ‘modification qui ne seront pas validées’ donc non indexé

L’effacement du fichier sera indexé avec la commande

$ git rm nomdufichier
GIT Effacer ou déplacer un fichier de git

git ne suit pas explicitement les mouvements des fichiers, même s’il sera capable de voir
qu’un fichier a été déplacé.

Il existe la commande :

$ git mv source destination

qui revient a faire les étapes :

$ mv source destination
$ git rm source
$ git add destination
GIT Historique

Pour voir l’historique :

$ git log

Permettra de voir certain logs, ainsi que des informations plus ou moins détaillées
GIT Modifier un commit

Certaines modifications sont permanentes

Il peut arriver que l’on valide une modification trop tôt en oubliant des fichiers

Pour modifier un commit :

$ git commit --amend

Cette commande va reprendre l’index du commit précédent

$ git add fichieroublié


$ git commit --amend
GIT Désindexer un fichier déjà indexé

On a indexé trop de fichiers par rapport au plan initial :

$ git reset HEAD nomdufichier


GIT Réinitialiser un fichier modifié

Pour faire revenir un fichier au niveau du précédent checkout :

$ git checkout – fichier

Attention : On aura une perte des modifications apportées au fichier depuis le


dernier checkout

Pour écarter cette modification, voir les branches


GIT Collaboration

Pour collaborer sur un projet GIT, il faudra savoir gérer les dépôts distants

Les dépôts distants sont des versions de votre projet qui sont hébergées sur Internet ou
sur le réseau d’entreprise

Vous pouvez en avoir plusieurs avec différents accès dessus :


lecture seule
Lecture et écriture
GIT Collaboration

Pour visualiser les serveurs distants que vous avez enregistré :

$ git remote

Si vous avez cloné un projet, vous devez avoir au moins un dépôt distant : ‘origin’

Pour ajouter des dépôts distants :

$ git remote add Gui https://github.com/Gui/Project01


GIT Collaboration

Pour récupérer des données d’un dépôt distant :

$ git fetch nomdudépot

Cela va requêter le dépôt distant pour récupérer toutes les données du projet que l’on
ne possède pas

Si vous clonez un dépôt distant, il sera automatiquement ajouté sous le nom ‘origin’

Pour l’envoyer et le partage

$ git push depotdistant nomdelabranche


$ git push origin master
GIT Collaboration

Pour renommer une référence

$ git remote rename gui AJCFormation

Pour supprimer une référence

$ git remote rm AJCFormation


GIT Etiquettes

git donne la possibilité d’étiqueter un certain état dans l’historique comme important

Généralement utilisé pour marquer les versions d’un projet :

V1.0.0 V1.0.5 V2.0.0

Pour lister les étiquettes

$ git tag

Pour faire une recherche

$ git tag –l ’v1.0.*’


GIT Etiquettes

On utilisera 2 types d’étiquette

Etiquette légère : ressemble beaucoup à une branche qui ne change pas, c’est juste
un pointeur sur un commit spécifique

Etiquette annotée : elle sera stockée en tant qu’objet à part entière dans la BD de GIT

Créer des étiquettes annotées et afficher le détail:

$ git tag –a v1.0.5 –m ‘Ma version 1.0.5’


$ git show v1.0.5
GIT Etiquettes

Pour partager des étiquettes, la commande git push ne transfère pas les étiquettes vers
les serveurs distants

Il faut explicitement pousser les étiquettes après les avoir créées localement

$ git push origin v1.0.5

Pour pouvoir pousser toutes les étiquettes que nous avons créé localement

git push origin --tags


GIT Etiquettes

Pour se placer à la position d’un commit étiqueté

git checkout –b v1.0.5

Grace à cela, nous pouvons naviguer à travers les versions de notre projet
GIT Branches

Créer une branche signifie diverger de la ligne principale de développement et continuer


à travailler sans impacter cette ligne

$ git add Readme test.txt License

$ git commit –m ’commit initial’

Pour créer une nouvelle branche

$ git branch testing


GIT Branches

Basculer entre les branches

$ git checkout master

Cela permet de mettre le pointeur HEAD sur master

Cela a remplacé les fichiers du répertoire dans l’état du snapshot pointé par master

L’arbre peut être retrouvé avec la commande

$ git log --online --decorate --graph --all


$ gitk --all
GIT Branches

Scénario : 

On nous annonce une nouvelle fonctionnalité à mettre en place

On crée une nouvelle blanche pour cela

$ git checkout –b Case123

équivalent de :

$ git branch Case123


$ git checkout Case123
GIT Branches

On nous annonce également qu’un problème a lieu en production

On crée une nouvelle branche dédiée au hotfix

$ git checkout –b hotfix

On modifie notre code

On commit

$ git commit –a –m ‘correction du module B2’


GIT Branches

Maintenant que le correctif est bon, on fusionne notre master et le correctif

$ git merge hotfix

Et on supprime la branche hotfix qui ne sert plus maintenant que tout est réglé

$ git branch –d hotfix

On peut retourner à notre travail précédent

$ git checkout Cas123

Vous aimerez peut-être aussi