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
......@@ -61,16 +61,15 @@ Il est possible de créer un nouveau projet :
Ici, pour créer le projet **vierge**, il suffit :
- de lui donner un **nom** (`project name`), ici `gitlab-basics`
- de renseigner une **description** (`project description`)
- de lui donner un **nom** (`project name`), ici `gitlab-bases`
- de spécifier sa **visibilité** (qui peut voir les fichiers, ce qui ne veut pas forcément dire pouvoir les modifier) :
- _private_, accessible uniquement au propriétaire et aux contributeurs qu'il aura autorisé
- _internal_, accessible à tous les utilisateurs du serveur
- _public_, accessible publiquement (sans connexion)
> :bulb:L'usage veut que le dépôt de code soit initialisé avec un fichier `README.md` décrivant ce qu'on peut y trouver. Ce fichier est généré à partir de la description et peut être modifié par la suite. Il est rédigé en utilisant la syntaxe [Markdown](https://daringfireball.net/projects/markdown/) (avec laquelle est aussi rédigé ce wiki :wink:)
> :bulb:L'usage veut que le dépôt de code soit initialisé avec un fichier `README.md` décrivant ce qu'on peut y trouver. Ce fichier est ici auto-généré et peut être modifié par la suite. Il est rédigé en utilisant la syntaxe [Markdown](https://daringfireball.net/projects/markdown/) (avec laquelle est aussi rédigé ce wiki :wink:)
![](uploads/5ff8a37dce0296fe4642a086f234e6b9/GitlabNewProjectWizardBlank.png)
![00-gitlab-newproject](uploads/5141ee9f42f8afe1d8e87a032af72e47/00-gitlab-newproject.png)
> :bulb: Il est également possible :
>
......@@ -85,7 +84,7 @@ Ici, pour créer le projet **vierge**, il suffit :
Une fois le nouveau projet créé, sa page d'accueil est affichée :
![](uploads/85728ee28bb361c282781053153b0683/GitlabNewProjectHome.png)
![01-gitlab-projectLandingPage](uploads/12bc5d27e9b6c39ede6b9d306a69d228/01-gitlab-projectLandingPage.png)
La **fenêtre principale** donne des informations générales sur le projet :
......@@ -95,16 +94,16 @@ La **fenêtre principale** donne des informations générales sur le projet :
- contenu du répertoire racine du dépôt
- contenu (formatté) du fichier `README.md`
![GitlabNewProjectHomeFocus](uploads/1cd7ef084ca4f7f82bd1887e644ca436/GitlabNewProjectHomeFocus.png)
![02-gitlab-projectLandingPageZoom](uploads/ece3c069a1fa008d3ebe59f30a69a9b9/02-gitlab-projectLandingPageZoom.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 et 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).
La fenêtre principale permet également quelques actions :
- observer l'historique (cette action est également accessible via le menu latéral (`Repository->Commits` ou `Repository->Graphs`)
- télécharger une archive contenant l'intégralité de la version courante du code
- cloner le dépôt (cf. plus loin)
- ouvrir l'IDE en ligne (_Web IDE_)
- **observer l'historique** (cette action est également accessible via le menu latéral (`Repository->Commits` ou `Repository->Graphs`)
- **télécharger une archive contenant l'intégralité de la version courante du code**
- **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, ...)
......@@ -129,15 +128,22 @@ L'URL permettant d'effectuer le clonage selon l'une ou l'autre des méthodes d'a
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'...
sebastienjean@MacBook-Air-749 ~ % git clone https://gitlab.iut-valence.fr/jeans/gitlab-bases.git
Cloning into 'gitlab-bases'...
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
```
> :bulb: Contrairement à `git init` qui devait être exécutée depuis un dossier servant de racine du dépôt et devant être préalablement créé, la commande `git clone` crée automatiquement le dossier racine avec le nom du dépôt à cloner.
On observe alors que le dépôt lest bien présent localement (répertoire `.git`) et que le working tree a bien été reconstruit (présence du fichier `README.MD`) :
```
MacBook-Air-749:~ sebastienjean$ cd gitlab-bases/
MacBook-Air-749:gitlab-bases 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 ..
......@@ -145,8 +151,6 @@ 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
```
> :bulb: Contrairement à `git init` qui devait être exécutée depuis un dossier servant de racine du dépôt et devant être préalablement créé, la commande `git clone` crée automatiquement le dossier racine avec le nom du dépôt à cloner.
### Visualisation de la configuration du dépôt, de l'état et de l'historique
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`) :
......@@ -161,7 +165,7 @@ MacBook-Air-749:gitlab-basics sebastienjean$ cat .git/config
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://gitlab.iut-valence.fr/jeans/gitlab-basics.git
url = https://gitlab.iut-valence.fr/jeans/gitlab-bases.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
......@@ -175,7 +179,7 @@ La section `branch` spécifie l'association des branches locales avec les branch
L'exécution de la commande `git status` montre aussi, dans le cas d'un clone, **en quoi la branche locale est ou non à jour** (_up to date_, ni en avance ni en retard) avec la branche distante :
```bash
MacBook-Air-749:gitlab-basics sebastienjean$ git status
MacBook-Air-749:gitlab-bases sebastienjean$ git status
On branch main
Your branch is up to date with 'origin/main'.
......@@ -184,11 +188,11 @@ nothing to commit, working tree clean
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)
```bash
MacBook-Air-749:gitlab-bases sebastienjean$ git log
commit 23b7e5413195e7804fdd5bb7de4fb3efe1f63180 (HEAD -> main, origin/main, origin/HEAD)
Author: Sebastien Jean <sebastien.jean@univ-grenoble-alpes.fr>
Date: Sun Jan 23 10:13:01 2022 +0000
Date: Sun Sep 25 07:18:39 2022 +0000
Initial commit
```
......@@ -210,20 +214,21 @@ Le schéma ci-dessous illustre le résultat du clonage, en montrant les branches
#### Ajout d'un commit local
On crée un nouveau fichier `unFichier.txt` à la racine du _Working Tree_ :
On crée un nouveau fichier `unFichier.txt` à la racine du _Working Tree_ (et ici on vérifie sa présence et son contenu) :
```bash
MacBook-Air-749:gitlab-basics sebastienjean$ cat > unFichier.txt
sebastienjean@MacBook-Air-749 gitlab-bases % cat > unFichier.txt
Une ligne de texte
MacBook-Air-749:gitlab-basics sebastienjean$ more unFichier.txt
MacBook-Air-749:gitlab-basics sebastienjean$ ls
sebastienjean@MacBook-Air-749 gitlab-bases % ls
README.md unFichier.txt
sebastienjean@MacBook-Air-749 gitlab-bases % cat unFichier.txt
Une ligne de texte
```
On valide une nouvelle version incluant ce fichier :
```
MacBook-Air-749:gitlab-basics sebastienjean$ git add unFichier.txt
MacBook-Air-749:gitlab-bases sebastienjean$ git add unFichier.txt
MacBook-Air-749:gitlab-basics sebastienjean$ git commit -m "ajout d'un fichier"
[main deebe14] ajout d'un fichier
1 file changed, 1 insertion(+)
......@@ -285,7 +290,7 @@ Lors de cette opération :
![GitLabPush3](uploads/5d53f1f2e1beb5539210d837f6f61f20/GitLabPush3.png)
> :bulb: Le serveur n'accepte les changements que s'ils consistent à **raccrocher des commits manquants derrière un commit présent sur le serveur** (_fast-forward_).
> :bulb: Le serveur n'accepte les changements que s'ils consistent à **raccrocher des commits manquants derrière un commit présent sur le serveur** (_fast-forward_).
>
> Lorsque plusieurs contributeurs travaillent sur des clones locaux d'un même dépôt distant, l'envoi de commits par un contributeur peut échouer car de nouveaux commits ont pu être déposés par un autre contributeur avant la comparaison locale des historiques (_non fast-forward_). Cette situation est courante, donne lieu à une resynhcronisation aval (`pull`) et éventuellement une résolution locale de conflits de modifications.
......
......