... | ... | @@ -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>
|
|
|
|
|
|
__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
|
|
|
|
|
|
> :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 : |
|
|
|
|
|
- visibilité,
|
|
|
- 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`)
|
|
|
|
|
|
<p align="center">
|
|
|
<img src="uploads/1cd7ef084ca4f7f82bd1887e644ca436/GitlabNewProjectHomeFocus.png" width="50%" />
|
|
|
</p>
|
|
|
[//]: 
|
|
|

|
|
|
|
|
|
> :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 : |
|
|
- cloner le dépôt (cf. plus loin)
|
|
|
- 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>
|
|
|
[//]:
|
|
|
|
|
|
> :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>
|
|
|
[//]: 
|
|
|
|
|
|
__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.
|
|
|
|