Gestion de versions

  • Enregistrer l'évolution des fichiers
  • Ramener les fichiers à un état précédent
  • Visualiser les changements dans le temps

Système local

  • RCS
  • Gestion de patchs (stock diff)
  • Base de données en local

Système centralisé

  • CSV, Subversion
  • Serveur central avec les fichiers versionnés
    • (+) collaboration entre plusieurs personnes
    • (-) serveur en panne = stop versionning
    • (-) historique à un endroit unique

Système distribué

  • Git, Mercurial
  • Un dépôt contient tout l'historique
  • Une extraction = sauvegarde complète des données

Installation

Debian GNU/Linux


apt-get install git
			

Démarrer un dépôt

  1. Prendre un projet existant et l’importer dans Git
  2. Cloner un dépôt Git existant depuis un serveur

Cloner un dépôt

Git reçoit une copie de quasiment toutes les données dont le serveur dispose, l'historique de tous les fichiers du projet est téléchargé.


git clone https://github.com/jeromefath/iut-mmi-programmation-web.git
				

Git, les rudiments

Qu'est-ce que Git en quelques mots ?

Git, les opérations sont locales

  • parcourir historique
  • gestion des versions
  • ...

Git, les trois états

  • validé (données stockées dans la base locale)
  • modifié (fichié modifié, pas encore validé en base)
  • indexé (marque un fichier modifié pour faire partie de la prochaine version)

Sections d'un projet Git

  • répertoire Git (méta-données + base de données)
  • répertoire de travail (extraction unique d'une version d'un projet)
  • zone d'index (fichiers avec informations sur prochaine version)

Utilisation standard de Git

  1. Modification des fichiers dans le répertoire de travail
  2. Indexer fichiers modifiés = ajout des infos dans la zone d'index
  3. Valider = ajout d'une version dans la base de données locale de git
Répertoire de travail, zone d'index et répertoire Git.

Git, enregistrer des modifications

Cas de figure pour un projet cloné à partir d'un dépôt Git existant.

Pour vérifier quels fichiers sont dans quel état :


git status
				

Pour consulter les modifications de façon plus compacte :


git status -s
				

Placer de nouveaux fichiers sous suivi de version ou indexer des fichiers modifiés :


git add file1.txt
				

Dans le cas où un fichier est accidentelement indexé, il est possible d'abandonner le suivi de version :


git rm --cached file1.txt
				

Pour visualiser ce qui a été modifié mais pas encore indexé :


git diff
				

Pour visualiser les modifications indexées qui feront partie de la prochaine validation :


git diff --cached
				

Une fois la zone d’index dans l’état désirée, valider (crée une nouvelle version) et ajouter un message pour décrire les modifications :


git commit
				

Le message de validation peut être renseigé en ligne de commande :


git commit -m "description du commit"
				

Pour consulter un historique de validation (commits) :


git log #affiche le détail des commits
git log --pretty=oneline #affiche un résumé sur une ligne de chaque commit
				

.gitignore, détermine les fichiers ne devant pas apparaître pour le suivi de version :


.DS_Store
.svn
log/*.log
tmp/**
node_modules/
.sass-cache
css/reveal.min.css
js/reveal.min.js
				

Git, dépôt distant

Cas de figure pour un projet existant importer dans Git.

Création d'un dépôt git dans un répertoire existant :


git init
				

A cet instant un nouveau répertoire .git est créé et encore aucun fichier n'est versionné.

Les dépôts distants sont des versions du projet hébergées sur un serveur, il est possible de configurer plusieurs dépôts :


git remote add [name] [url]
				

Pour visualiser les serveurs distants enregistrés :


git remote
				

Ajouter l'option -v pour obtenir l'url associée à chaque nom des dépôts distants enregistrés :


git remote -v
				

Récupérer et tirer depuis des dépôts distants, pour obtenir les données lancer la commande :


git fetch [name]
				

Pousser son travail sur un dépôt distant avec la commande :


git push [name] [branch]
				

Git, la magie des branches

Pour les systèmes de gestion de versions, les branches peuvent être représentées par la séparation d'une route en deux chemins distincts.

Dans Git, une branche est un pointeur vers un commit du dépôt.

Représentation d'une branche et l'historique de ses commits.

À chaque validation, le pointeur de la branche master avance automatiquement.

Comment créer une nouvelle branche ?


git branch testing
				
Représentation du pointeur HEAD vers une branche.

Comment basculer entre les branches ?


git checkout testing
				
HEAD pointe vers la branche courante.

git add file.txt
git commit -m "add file"
				
La branche HEAD avance à chaque _commit_.

Git, branches et fusions

Nous travaillons sur notre branche testing pour l'implémentation d'une nouvelle fonctionnalité.

Une fois le développement terminé, la branche testing est fusionnée dans master.


git checkout master
git merge testing
				
Attention aux conflits de fusions !

Les branches distantes permettent de conserver l’état des branches sur votre dépôt distant.

Les travaux locaux et distants peuvent diverger.

Dans le cas d'un projet collaboratif, vous pouvez synchroniser vos travaux avec les commandes suivantes :


git fetch origin #récupère les données distantes mise à jour par un autre développeur
git merge origin/master #fusionne votre branche master avec les données distantes rapatriées
				

Une branche de suivie permet de rapatrier et fusionner les données depuis un dépôt distant en une commande :


git pull origin master
				

Pour obtenir la liste des branches distantes suivies ou non rapatriées et celles automatiquement poussées, utilisez la commande en spécifiant le nom court du dépôt distant :


git remote show [name]