Introduction au dépôt distant avec Gitlab

Créer un dépôt distant

DéfinitionRemote

Une remote repository (ou dépôt distant) est un dépôt Git en ligne.

Il se comporte comme un repository local, il stocke donc un ensemble de commits.

FondamentalIntérêt des remotes

  • Partage du dépôt git : on peut désormais travailler à plusieurs dessus

  • Sauvegarde du travail à distance

DéfinitionForge

Une forge est un système de gestion de versions associé à des fonctions collaboratives (discussions, gestions de bugs...).

Une forge Git est une forme qui repose sur Git comme système de gestion de version. Les forges Git sont aujourd'hui parmi les plus répandues.

ExempleGithub

Github est une énorme forge Git centralisée propriété de Microsoft depuis 2018.

github.com

ExempleGitlab

Gitlab est un logiciel permettant d'installer sa propre forge Git dans une logique décentralisée.

Framasoft et l'UTC hébergent chacune une instance de la forge Gitlab (il en existe beaucoup d'autres).

gitlab.utc.fr

framagit.org

MéthodeCréation d'un projet (dépôt distant)

Pour le Gitlab de l'UTC :

  • Se rendre sur https://gitlab.utc.fr

  • Une fois connecté avec ses identifiants CAS, il suffit d'appuyer sur le bouton « New project » et de renseigner un nom et un niveau de visibilité

ComplémentAjout de clé SSH

Pour simplifier l'authentification au serveur, on peut ajouter sa clé publique SSH à son profil.

Cloner un dépôt distant

MéthodeCloner un dépôt

Cloner un dépôt Git, c'est récupérer une copie du remote repository sur sa machine. Cela fera en même temps la configuration nécessaire pour que :

  • un dépôt local soit créé,

  • le dépôt distant soit lié au dépôt local.

Syntaxe

À partir du dossier dans lequel on souhaite créer le dépôt local :

git clone url .

Exemple

mkdir helloworld
cd helloworld
git clone https://framagit.org/stph.crzt/helloworld .

Tirer des changements

Méthode

Tirer des changements, c'est récupérer des commits depuis le dépôt distant.

Syntaxe

git pull

Cette commande ajoute les commits distants au dépôt local.

Attentiongit pull et working directory

Si la «copie de travail» n’est pas propre, c’est à dire contenant des modifications non-référencées, et que les fichiers concernés existent sur le dépôt distant, alors git pull affichera un message d’erreur vous invitant à valider ou annuler vos modifications locales. Cela ne concerne pas les fichiers existant uniquement dans l’espace de travail.

Attentiongit pull et dépôt local

Si votre dépôt local et le dépôt distant ont divergés et au moins un fichier a été modifié de chaque côté, alors git pull créera automatiquement un commit de fusion. Si une même ligne dans un même fichier a été modifiée des deux côté, alors il y a un conflit.

RemarqueFusion et conflits

Parfois, bien qu’il y ait de nouveaux commits sur le dépôt distant, git pull indique que le dépôt local est à jour. Pour forcer git à télécharger les nouvelles références sur le dépôt distant, on peut utiliser la commande git fetch.

Pousser des commits

Méthode

Pousser un ou plusieurs commits, c'est envoyer du travail local sur le serveur pour le sauvegarder et éventuellement le partager.

Syntaxe

git push

Cette commande ajoute les commits locaux au dépôt distant.

Attention

Par défaut, git push retournera une erreur si votre dépôt local a divergé par rapport au dépôt distant, pour éviter d’écraser par erreur les commits côté serveur.

Il faut donc penser à faire un git pull avant un git push.

Collaborer avec Gitlab : droits, issues, commentaires

MéthodeGérer les droits

  • Visibilité du projet (droit de le cloner)

  • Droits sur le projet (droit de pousser des modifications)

  • Droits sur les issues (droit de proposer des issues)

https://framagit.org/stph.crzt/helloworld/edit

DéfinitionIssue

Une issue est le relevé d'un problème ou d'une demande d'amélioration effectué sur la forge

Il y a plusieurs intérêts, par exemple :

  • Cela facilite la communication entre les différents acteurs (on peut s'en servir pour faire remonter les erreurs rencontrées).

  • Cela permet d'assurer un suivi (on peut lister toutes les tâches à réaliser sous la forme d'issues).

  • Cela permet d'organiser le travail à plusieurs (on peut assigner une issue à quelqu'un).

  • Cela permet de discuter sur les évolutions (chaque issue peut servir d'espace de discussion contextuel).

  • On peut référencer les issues dans les messages de commit (souvent pour signifier que l'on a résolu cette issue).

MéthodeGérer les évolutions avec les issues

https://framagit.org/stph.crzt/helloworld/-/commit/ed2374656ae75dee02c9ae72a5b93abcbfc5482f

MéthodeCommenter les commits

https://framagit.org/stph.crzt/helloworld/-/issues/new

Remarque

Il est possible de commenter chaque ligne des diff.

Gérer la concurrence et les conflits

Attention

Si deux personnes sont autorisées à pousser sur le même distant alors il y a un risque de conflit.

Un conflit survient quand deux dépôt locaux ont produit des modifications localement concernant les mêmes fichiers et cherchent ensuite à les pousser sur le même dépôt distant.

Remarque

Si une seule personne utilise deux dépôt locaux connectés au même dépôt distant (par exemple pour travailler sur deux machines différentes), alors il y a aussi risque de conflit.

DéfinitionConflit

On parle de conflit lorsque deux personnes on modifié les mêmes lignes d'un fichier en parallèle et que Git ne peut donc pas savoir quelle version conserver lors d'une fusion.

  • Git ne comprend pas le texte qu'il versionne, il ne sait donc pas quoi garder en cas de conflit.

  • Résoudre un conflit c'est dire à Git quelle est la bonne version à garder.

  • Il peut s'agit d'une des deux versions uniquement, ou d'un mélange des deux.

Exemple

  • Alice tire le projet en (a), il y a 3 commits.

  • Alice ajoute un commit C4 sur son dépôt local.

  • Pendant ce temps, Bob ajoute son commit C4' sur le projet et le pousse sur le dépôt distant.

  • Si Alice veut pousser sa modification C4 alors elle doit d'abord tirer les modifications de Bob et en cas de conflit choisir quelles modifications parmi celles de Bob sont pertinentes.

ConseilBonnes pratiques

La résolution des conflits n'est pas toujours une tâche aisée, surtout pour des débutants, il est conseillé de :

  • éviter les conflits en se coordonnant (savoir qui fait quoi et quand sur le dépôt distant),

  • lorsqu'un conflit survient, bien prendre le temps de le résoudre en consultant attentivement les fichiers concernés.

ConseilConseil de brute

Si :

  1. un conflit survient,

  2. que vous avez des modifications auxquelles vous tenez en local,

  3. que vous n'êtes pas sûr de ce que vous allez faire parce que vous ne connaissez pas bien Git,

alors :

  • je vous conseille de copier le contenu de votre dossier "à l'ancienne" (dans un dossier temporaire), avant de résoudre votre conflit.

Complément

La bonne gestion des conflits suppose (notamment) l'usage des fonctions Git de type branch et merge et l'usage des fonctions Gitlab de type merge request.

Défi : Veille

Créez un dépôt distant (projet) sur le Gitlab de l'UTC que vous intitulerez Veille :

  • créez un fichier README.md avec votre nom (ou un pseudo),

  • associez une licence (compatible avec celle de Wikipédia),

  • clonez le projet en local.

Ajoutez un fichier prism.md qui contient le premier paragraphe concernant ce programme de la NSA sur Wikipédia.

Commitez et poussez ce fichier.

Modifiez votre fichier afin d'ajouter la fin de l'introduction présente sur Wikipédia, commitez et poussez.

Supprimez votre dépôt local puis créez à nouveau le dépôt.

Accordez-vous avec un autre utilisateur que nous appellerons Édouard dans le cadre de cet exercice.

Autorisez Édouard à pousser sur votre dépôt (et demandez-lui de faire de même pour vous).

Clonez le dépôt d'Édouard et poussez un fichier chelsea.md sur son dépôt qui contient le premier paragraphe de présentation de Chelsea Manning sur Wikipédia.

Commentez le premier commit d'Édouard afin de lui conseiller d'ajouter un email à son README.

Ajoutez une issue à votre projet afin de prévoir l'ajout d'un document sur Aaron Swartz.

Ajoutez une issue au projet d'Édouard afin de lui demander l'ajout d'un document sur Wikileaks.

Liste des raccourcis clavier

Liste des fonctions de navigation et leurs raccourcis clavier correspondant :

  • Bloc Suivant : flèche droite, flèche bas, barre espace, page suivante, touche N
  • Bloc Précédent : flèche gauche, flèche haut, retour arrière, page précédente, touche P
  • Diapositive Suivante : touche T
  • Diapositive Précédente : touche S
  • Retour accueil : touche Début
  • Menu : touche M
  • Revenir à l'accueil : touche H
  • Fermer zoom : touche Échap.