Le versionnement des documents peut souvent être fastidieux et générer des erreurs ou des pertes de données. Pour vous aider à organiser vos fichiers, nous vous présenterons le protocole de versionnement Git, ainsi que l'une de ses applications les plus utiles.
Chaire de recherche du Canada sur les écritures numériques, Bibliothèque des lettres et des sciences humaines, Ouvroir d'histoire de l'art et de muséologie numérique. — giulia.ferretti@umontreal.ca ; louis-olivier.brassard@umontreal.ca
Plan de la séance
Lorsque vous travaillez seul ou en équipe, vous risquez toujours de perdre une partie, voire l’entièreté de votre travail. Cela devient particulièrement critique lorsque vous avez accumulé des mois, voire des années de travail et que l’échéance approche : les conséquences d’une mauvaise sauvegarde peuvent être désastreuses !
Heureusement, un système simple mais fort robuste vous permet d’enregistrer l’historique de vos modifications et d’en faire une archive distribuée à différents endroits. Ce système est d’ailleurs fort utile lors de travaux réalisés à plusieurs : Git.
Git est un logiciel de gestion de versions décentralisé : il met en place un système distribué de contrôle de versions (Distributed version control system).
Schéma d’un réseau centralisé simple
Schéma d’un réseau distribué
Les trois formes de réseaux selon Paul Baran (1962)
Prenons un dossier de travail collaboratif sur un article :
# dossier de travail
.
├── article-michel-coquilles-corrigees.txt
├── article-relu-2021-12-09-final-ok-okok.txt
├── article-v1-relu-alice-bob-13fev.txt
├── article-v1-relu-alice-bob-VRAI.txt
└── article-vfinal-jeanne.txt
Quel fichier est le bon ? Quels fichiers contiennent les relectures de qui ?
1.2. Versionnement
Git permt de suivre un projet dans son ensemble (et pas forcément un fichier en particulier).
Il y a plusieurs principes inhérents à une bonne gestion collective de fichiers informatiques :
Visualisation d’un fil de travail collaboratif avec les « branches » de Git
Git est un système de fichiers adressables en fonction de leur contenu.
Exemple de fichier avec la mise en surbrillance des modifications (diff)
Git est utilisé pour toutes sortes de projets: recherche scientifique, mémoires et doctorats, développement collaboratif de logiciels, archives personnelles, rédaction de documents en tous genres, publication de données, etc.
Exemples de projets utilisant Git :
Vous pouvez installer Git depuis son site web.
Dans votre terminal, tapez : git --version
sudo apt install git-all
git --version
vous proposera d’installer un outillage pour le développement, lequel inclut Git2. Installation
Si la ligne de commande n’est pas encore votre tasse de thé, ne craignez rien ! Il existe des interfaces graphiques qui vous permettent d’utiliser Git de manière visuelle.
L’organisation qui chapeaute Git recense plusieurs logiciels dans cette catégorie. (Attention, la plupart de ces logiciels ne sont que des interfaces qui nécessitent l’installation de Git séparément !)
Exemple de répertoire de travail suivi avec Git avec une interface graphique
Exemple de répertoire pour un projet de rédaction d’article
Fil de commits par Margot Mellet pour son carnet d’écriture (CC0 1.0 universel - domaine public)
Dans un dossier mon-projet/
:
git init
pour initialiser un dépôt Git dans ce dossier.article.md
.git status
– qu’est-ce que vous voyez ?git add article.md
– vous indexez votre nouveau fichier dans les modifications à venir !git commit -m "le message d'enregistrement"
– validez votre enregistrement.git log
(touche q
pour sortir) – qu’est-ce que vous voyez ?Exemple d’état d’un dépôt après une première validation dans une interface graphique
Exemple d’état d’un dépôt après plusieurs commits (rondes de modifications) dans une interface graphique
Exemple d’état d’un dépôt après plusieurs commits, visualisation dans le terminal (avec la commande git log
)
Les plateformes comme GitHub ou GitLab sont des services en ligne qui permettent d’héberger vos projets versionnés avec le protocole Git.
Avec Git, vous pouvez facilement passer d’un fournisseur à l’autre, et même en utiliser plusieurs à la fois !
Nous commencerons avec GitHub, qui est un service populaire et gratuit.
Dépôt du carnet d’écriture de Margot Mellet (CC0 1.0 universel - domaine public)
Schéma d’une organisation simple qui distribue les copies d’un projet de manière centralisée
4. Les plateformes d’hébergement Git (GitHub / GitLab / FramaGit / …)
projet-debogue
. N’initialisez pas le dépôt (décochez cette option).git remote add origin url-que-vous-avez-copié
… mais avant de pouvoir faire la synchronisation, il va falloir configurer Git sur votre poste !
Comme beaucoup d’outils, Git nécessite quelques réglages préalables ! Il est aussi possible de ajouter des configurations spécifiques pour un projet en particulier.
git config --list
git config --global user.name "Prénom Nom"
git config --global user.email "mon.addresse@umontreal.ca"
5. Configurer Git
.pub
, qui sera partagée) et une clé privée – celle-ci ne doit jamais quitter votre ordinateur !Pour en savoir plus, lire la documentation fournie par GitHub.
5. Configurer Git
ssh-keygen -t ed25519 -C "email@exemple.com"
ssh-keygen -t rsa -b 4096 -C "email@exemple.com"
-t
pour spécifier l’algorithme à utiliser-b
pour spécifier la longer (bits) de la clé-C
pour ajouter un commentairePour en savoir plus, lire la documentation fournie par GitHub.
5. Configurer Git
Lorsque vous aurez généré votre paire de clés, il faudra ajouter votre clé publique (id_rsa.pub
) à votre compte GitHub.
~/.ssh/id_rsa.pub
) dans le champ Key.Alice@portable-perso
ou Bob@ordi-de-bureau
.Voilà ! Vous devriez maintenant avoir les droits d’accès depuis votre poste. Si vous avez trouvé cette étape complexe, n’ayez crainte : vous n’avez qu’à la faire la première fois !
git init
: initialiser un dossiergit status
: voir l’état du projetgit log
: afficher l’historique de la branche actuellegit add
: ajouter un fichier dans l’index avant de commitergit commit
: déclarer des modificationsgit branch
: créer une nouvelle branchegit checkout
: pour basculer sur une branchegit push
: envoyer les modifications sur un dépôt distantgit fetch
: récupérer les modifications d’un dépôt distantgit pull
: récupérer les modifications d’un dépôt distant et les fusionner avec le dépôt local
git merge
– fusionner l’historique d’une branche sur une autregit rebase
– harmoniser les historiques de deux branches (stratégie utile pour la fusion)git cherry-pick
– récupérer une seule modification sur une autre branchegit log
– pour examiner l’historique des modifications
Voilà ! Vous avez appris les rudiments de Git. Il ne vous reste plus qu’a l’employer dans vos propres projets.
Vous pouvez poursuivre la leçon pour des cas d’utilisation plus pointus (et tout à fait utiles !).
7. Conflits, merge, rebase, forks
7. Conflits, merge, rebase, forks
Suite à l’exercice 1, nous allons créer plusieurs modifications :
modifs
: git branch modifs
et puis git checkout modifs
echo "Autre texte hop là" >fichier-01.txt
git commit -a -m "révision de la première ligne"
7. Conflits, merge, rebase, forks
git checkout master
(ou git checkout main
selon votre configuration)echo "Ceci est mon texte" >fichier-01.txt
git commit -a -m "réécriture"
git merge modifs
Vous devez avoir un conflit !
7. Conflits, merge, rebase, forks
7. Conflits, merge, rebase, forks
git checkout -b modifs
pour se positionner sur une nouvelle branche secondairegit checkout master
git checkout modifs
git rebase master
: les commits dans la branche modifs sont positionnés à la suite des commits de la branche mastergit checkout master
git rebase feature
: les commits en plus dans ma branche modifs sont désormais ajoutez dans la branche master7. Conflits, merge, rebase, forks
git remote add upstream git@gitlab.chemin-du/projet
.git fetch upstream
.git rebase upstream/master
.
7. Conflits, merge, rebase, forks
Un tutoriel complexe à explorer si vous êtes motivé·e :
Vous avez passé à travers une montagne d’information – ouf ! Ne soyez pas dur·e·s avec vous-mêmes : Git est un système complexe qui nécessite un apprentissage continu dans la durée. Même les experts ne connaissent généralement qu’une fraction de son fonctionnement.
Toutefois, tous peuvent l’utiliser, et nous espérons que vous saurez bénéficier de ce qu’il a à offrir.