> :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*).
> :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`.
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`)
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 :
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.