Systèmes de gestion de versions

Définition

<aside> 📘 Permet de stocker un ensemble de fichiers en conservant l’historique des modifications.

</aside>

Propriétés

<aside> 🔣 Liste des modifications, auteur, date, message associé à chaque modification, …

</aside>

Intérêts

<aside> 👌 Conservation de l’histoire d’un projet ; Gestion des conflits (Développement à plusieurs, Développement sur plusieurs machines/systèmes) ; Obtention aisée de la dernière version ; Récupération d’une version précédente ; Étiquetage des versions ; Gestion de branches : stable, devel, experimental, etc.

</aside>

Historique

Classification par mode de fonctionnement

Local Centralisé Décentralisé
Dépôt local au projet Dépôt sur un serveur central, accessible par le réseau Pas nécessairement de serveur central (→ git)

Systèmes décentralisés

Avantages et Inconvénients de la gestion décentralisée

<aside> <img src="/icons/plus_blue.svg" alt="/icons/plus_blue.svg" width="40px" /> Pas dépendant d’une seule machine comme point de défaillance ; Possibilité de travailler sans être connecté au gestionnaire de version ; Participation à un projet sans nécessiter de permissions particulières ; Opérations locales, généralement sont plus rapides ; Permet le travail privé (brouillons, …) ; Permet toutefois de garder un dépôt de référence central

</aside>

<aside> <img src="/icons/remove_red.svg" alt="/icons/remove_red.svg" width="40px" /> Cloner un dépôt implique de copier tout l’historique ; Pas de système de verrou (peut poser des problèmes pour des données binaires qui ne se fusionnent pas) ; Peut être plus complexe de fusionner différents développements

</aside>

Git

Caractéristiques

<aside> 🗨️ Développé par Linus Torvalds (avril 2005), remplacement de Bitkeeper sur la gestion du noyau Linux ; Fonctionne sous Linux, Unix, OS X, Windows ; GPL v2 ; Performant ; Communications par les protocoles GIT, HTTP, HTTPS, SSH ; Commits identifiés par une somme SHA-1 (hash)

</aside>


Git clone

L'opération git clone permet de récupérer localement une copie complète d'un dépôt Git.

# URL en HTTPS
git clone <https://gitlab.iut-bm.univ-fcomte.fr/LOGIN/DEPOT.git>
# URL en SSH
git clone [email protected]:LOGIN/DEPOT.git

La commande git

man git clone
git help clone

Vers le premier commit

git status

Affiche l'état actuel du dépôt Git, y compris les fichiers modifiés, non suivis et indexés.

git diff

Affiche les différences entre les modifications non indexées dans le répertoire de travail et la dernière validation.

git diff --word-diff

Similaire à git diff, mais elle affiche les différences mot par mot au lieu de ligne par ligne.

git add README.md

Ajoute le fichier README.md à l'index, ce qui signifie qu'il sera inclus dans le prochain commit.

git diff

Après avoir ajouté le fichier README.md à l'index, affiche les différences entre les modifications non indexées et les modifications indexées.

git diff --cached

Affiche les différences entre les modifications indexées et la dernière validation.

git commit

Crée un commit avec les modifications indexées et ouvre un éditeur de texte pour saisir un message de commit.

Enregistrer un commit

git add <fichier...>

Ajouter des modifications d'un ou plusieurs fichiers à la zone de préparation (staging area) en vue de les inclure dans le prochain commit.

git commit

Enregistrer les modifications actuellement présentes dans la zone de préparation (staging area) dans un nouveau commit.

git commit -a

Ajoute et commet automatiquement toutes les modifications apportées à tous les fichiers qui sont déjà sous suivi par Git, sans avoir à utiliser la commande git add pour chaque fichier modifié.

git commit -m "Message"

Similaire à git commit, mais elle vous permet de spécifier le message de commit directement en ligne de commande, sans ouvrir un éditeur de texte.

Revoir les commits

gitk

Interface graphique pour voir les commits

git show

Dernier commit

Annuler le dernier commit

Mettre du travail de côté

Les branches

Exemples de commandes

git diff v2.5 HEAD
git log v2.5..v2.6
git log v2.5.. # HEAD par défaut
git log v2.5.. Makefile
git branch stable v2.5
git show v2.5:Makefile

Rechercher un motif : git grep