... | ... | @@ -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:)
|
|
|
|
|
|

|
|
|

|
|
|
|
|
|
> :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 :
|
|
|
|
|
|

|
|
|

|
|
|
|
|
|
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`
|
|
|
|
|
|

|
|
|

|
|
|
|
|
|
> :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 : |
|
|
|
|
|

|
|
|
|
|
|
> :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.
|
|
|
|
... | ... | |