Update Gestion de versions avec hébergement du dépôt sur un serveur GitLab, les bases authored by Sebastien Jean's avatar Sebastien Jean
...@@ -4,8 +4,6 @@ L'objectif de ce qui suit est de prendre en main la plateforme *GitLab*, permett ...@@ -4,8 +4,6 @@ L'objectif de ce qui suit est de prendre en main la plateforme *GitLab*, permett
<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small> <small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table of contents generated with markdown-toc</a></i></small>
__N.B.__ : _les manipulations suivantes sont effetcuées depuis un terminal Linux-compatible, les commandes ont des équivalents sous Windows_
## Connexion à un compte utilisateur sur le serveur *GitLab* interne de l'IUT de Valence ## Connexion à un compte utilisateur sur le serveur *GitLab* interne de l'IUT de Valence
> :warning: Les services fournis par *GitLab* sont rendus disponibles de 2 manières > :warning: Les services fournis par *GitLab* sont rendus disponibles de 2 manières
...@@ -98,12 +96,7 @@ La fenêtre principale donne des informations générales sur le projet : ...@@ -98,12 +96,7 @@ La fenêtre principale donne des informations générales sur le projet :
- visibilité, - visibilité,
- nombre de commits, de branches, de tags (_N.B. : un tag est un étiquette permettant de souligner un commit particulier_) - nombre de commits, de branches, de tags (_N.B. : un tag est un étiquette permettant de souligner un commit particulier_)
- les fichiers et répertoires présents à la racine du dépôt (ici `README.md`) ![GitlabNewProjectHomeFocus](uploads/1cd7ef084ca4f7f82bd1887e644ca436/GitlabNewProjectHomeFocus.png)
<p align="center">
<img src="uploads/1cd7ef084ca4f7f82bd1887e644ca436/GitlabNewProjectHomeFocus.png" width="50%" />
</p>
[//]: ![GitlabNewProjectHomeFocus](uploads/1cd7ef084ca4f7f82bd1887e644ca436/GitlabNewProjectHomeFocus.png)
> :bulb: Par convention dans *GitLab*, la branche principale (par défaut) s'appelle `main`. A la création du projet, le fichier `README.md` est inclus dans un premier commit. Le dépôt est dit *bare* (brut), il ne contient que l'historique est non les fichiers eux-mêmes. GitLab donne l'illusion que les fichiers sont présents en offrant comme service leur visualisation et leur édition (qui se traduisent par des opérations sur l'historique). > :bulb: Par convention dans *GitLab*, la branche principale (par défaut) s'appelle `main`. A la création du projet, le fichier `README.md` est inclus dans un premier commit. Le dépôt est dit *bare* (brut), il ne contient que l'historique est non les fichiers eux-mêmes. GitLab donne l'illusion que les fichiers sont présents en offrant comme service leur visualisation et leur édition (qui se traduisent par des opérations sur l'historique).
...@@ -113,3 +106,106 @@ La fenêtre principale permet également quelques actions : ...@@ -113,3 +106,106 @@ La fenêtre principale permet également quelques actions :
- cloner le dépôt (cf. plus loin) - cloner le dépôt (cf. plus loin)
- ouvrir l'IDE en ligne (*Web IDE*) - ouvrir l'IDE en ligne (*Web IDE*)
L'ensemble des actions est accessible depuis le menu latéral, notamment la configuration du projet (contribteurs, rôles, ...)
## Clonage du dépôt
L'opération de clonage, comme illustré ci-dessous, permet de créer localement (sur le poste de travail d'un dévéloppeur) un dépôt contenant une copie intégrale de l'historique du dépôt distant et une reconstruction du *Working Tree* correspondant au dernier commit (dépôt *non bare*).
<p align="center">
<img src="uploads/7d83d539332343ba88df981a788b4585/GitLabClone.png" width="50%" />
</p>
[//]:![GitLabClone](uploads/7d83d539332343ba88df981a788b4585/GitLabClone.png)
> :bulb: Les dépôts *internal* ou *private* ne peuvent être clonés qu'après authentification de l'utilisateur réalisant le clonage (les dépôts *public* sont clonables sans authentification). L'authentification et le clonage en lui-même) peuvent s'effectuer via le protocole `git` (nécessitant l'ajout sur le serveur d'une clé SSH associée à l'utilisateur) ou via le protocole `https` (authentification par mot de passe ou token)
L'URL permettant d'effectuer le clonage selon l'une ou l'autre des méthodes d'authentification peut être obtenue via l'action `clone`.
<p align="center">
<img src="uploads/ba79bfb3c7f327cf4208e4a9e5d9e920/GitLabCloneURL.png" width="50%" />
</p>
[//]: ![GitLabCloneURL](uploads/ba79bfb3c7f327cf4208e4a9e5d9e920/GitLabCloneURL.png)
__N.B.__ : _les manipulations suivantes sont effectuées depuis un terminal Linux-compatible, les commandes ont des équivalents sous Windows_
Depuis le poste de travail, la commande `git clone` permet le clonage du dépôt (ici via `https`) :
```bash
MacBook-Air-749:~ sebastienjean$ git clone https://gitlab.iut-valence.fr/jeans/gitlab-basics.git
Cloning into 'gitlab-basics'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
MacBook-Air-749:~ sebastienjean$ cd gitlab-basics/
MacBook-Air-749:gitlab-basics sebastienjean$ ls -al
total 8
drwxr-xr-x 4 sebastienjean staff 128 Jan 23 17:57 .
drwxr-xr-x@ 160 sebastienjean staff 5120 Jan 23 17:57 ..
drwxr-xr-x 12 sebastienjean staff 384 Jan 23 18:00 .git
-rw-r--r-- 1 sebastienjean staff 54 Jan 23 17:57 README.md
```
## Visualisation de la configuration du dépôt, de l'état et de l'historique
### Configuration du dépôt
L'affichage de la configuration du dépôt local (fichier `config` dans le dossier caché `.git`) fait apparaitre des sections liées au clonage (`remote`, `branch`)
```bash
MacBook-Air-749:gitlab-basics sebastienjean$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://gitlab.iut-valence.fr/jeans/gitlab-basics.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
```
La section `remote` spécifie que ce dépôt local est lié à un dépôt distant identifié par convention avec le nom symbolique `origin`. la propriété `fetch` indique que chaque branche `b` du dépôt distant sera suivie localement dans une pseudo branche (*remote-tracking branch*) nommée `origin/b`. (ici `main`sera suivie localement en `origin/main`)
La section `branch` spécifie l'association des branches locales avec les branches distantes. Ici la branche `main` est associée à la branche `main` distante (suivie localement dans `origin/main`) et chaque les évolutions distantes de cette branche seront fusionnées (*merge*) dans la branche locale.
### Etat du dépôt
L'exécution de la commande `git status` montre aussi , dans le cas d'un clone, en quoi la branche locale est ou non en à jour (*up to date*, ni en avance ni en retard) avec la branche distante :
```bash
MacBook-Air-749:gitlab-basics sebastienjean$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
```
### Historique du dépôt
La commande `git log` permet de voir l'historique de façon exhaustive et d'y retrouver les pointeurs :
```git
MacBook-Air-749:gitlab-basics sebastienjean$ git log
commit fd7357b0eda5a17ed4b66b995751219f303a85cd (HEAD -> main, origin/main, origin/HEAD)
Author: Sebastien Jean <sebastien.jean@univ-grenoble-alpes.fr>
Date: Sun Jan 23 10:13:01 2022 +0000
Initial commit
```
Ici, on peut observer les pointeurs suivants :
- `HEAD`, qui désigne toujours le commit sur lequel est basé la reconstruction du *working tree*
- `main`, qui désigne toujours dernier commit de la branche locale `main`
- `origin/main, qui désigne le dernier commit de la branche distante `main`
- `origin/HEAD`, qui désigne le commit sur lequel est basé la reconstruction du *working tree* distant (_N.B. celui-ci n'existe pas, les pointeurs `origin/main` et `origin/HEAD` seront toujorus alignés_)
Et on en déduit que l'historique local est absolument à jour avec l'historique distant.