Skip to content
Snippets Groups Projects
Verified Commit e16d117b authored by orestis.malaspin's avatar orestis.malaspin
Browse files

updated for 2024

parent 81edc0f2
No related branches found
No related tags found
No related merge requests found
Pipeline #36326 passed
...@@ -5,18 +5,18 @@ ...@@ -5,18 +5,18 @@
# Qu'est-ce que Git? # Qu'est-ce que Git?
- Git est un outil de gestion de versions (dév. par L. Torvalds). - Git est un outil de gestion de versions (dév. par L. Torvalds).
* Cela évite d'avoir à gérer les fichiers d'un projet comme: - Cela évite d'avoir à gérer les fichiers d'un projet comme:
- fichier.c - fichier.c
- fichier_10_3_2020.c - fichier_10_3_2020.c
- fichier_10_3_2020_16h.c - fichier_10_3_2020_16h.c
- fichier_10_3_2020_16h_Malaspinas.c - fichier_10_3_2020_16h_Malaspinas.c
- fichier_10_3_2020_16h_Albuquerque.c - fichier_10_3_2020_16h_Albuquerque.c
* L'historique est accessible à tout moment. - L'historique est accessible à tout moment.
* Difficile d'écraser le mauvais fichier lors d'une synchronisation. - Difficile d'écraser le mauvais fichier lors d'une synchronisation.
- Possibilité de découpler le développement dans un projet. - Possibilité de découpler le développement dans un projet.
* Fusionne les modifications non-conflictuelles automatiquement. - Fusionne les modifications non-conflictuelles automatiquement.
* Un projet peut avoir différentes *branches* de développement (on peut développer une nouvelle version et faire des corrections de bug en parallèle). - Un projet peut avoir différentes *branches* de développement (on peut développer une nouvelle version et faire des corrections de bug en parallèle).
- **Permet le travail de plusieurs développeurs sur le même projet!** - **Permet le travail de plusieurs développeurs sur le même projet!**
# Principe de fonctionnement de Git (1/3) # Principe de fonctionnement de Git (1/3)
...@@ -29,9 +29,9 @@ Mais, typiquement un projet git possède un serveur "officiel" (centralisé): ...@@ -29,9 +29,9 @@ Mais, typiquement un projet git possède un serveur "officiel" (centralisé):
- Un·e développeur·euse peut faire une copie (clone) de tout le projet (sur son ordinateur). - Un·e développeur·euse peut faire une copie (clone) de tout le projet (sur son ordinateur).
- Modifier localement le projet et publier (push) ses propres modifications (sur son ordinateur). - Modifier localement le projet et publier (push) ses propres modifications (sur son ordinateur).
- Demander au gestionnaire du projet de fusionner (merge) ses modifications avec le serveur "officiel" (pull/merge request): - Demander au gestionnaire du projet de fusionner (merge) ses modifications avec le serveur "officiel" (pull/merge request):
- L'administrateur récupère le projet depuis le serveur du développeur. - L'administrateur récupère le projet depuis le serveur du développeur.
- Fusionne le projet officiel avec celui modifié (merge). - Fusionne le projet officiel avec celui modifié (merge).
- Publie les modifications sur le serveur officiel (push). - Publie les modifications sur le serveur officiel (push).
# Principe de fonctionnement de Git (2/3) # Principe de fonctionnement de Git (2/3)
...@@ -43,14 +43,14 @@ Mais, typiquement un projet git possède un serveur "officiel" (centralisé): ...@@ -43,14 +43,14 @@ Mais, typiquement un projet git possède un serveur "officiel" (centralisé):
# A hepia # A hepia
* <https://gitedu.hesge.ch>, instance de `gitlab`. - <https://gitedu.hesge.ch>, instance de `gitlab`.
* **Attention:** `gitlab` ou `github` ce n'est pas `git`. - **Attention:** `gitlab` ou `github` ce n'est pas `git`.
* Connection aux repos via `https` (identifiants à rentrer à chaque fois), - Connection aux repos via `https` (identifiants à rentrer à chaque fois),
* ou via `ssh` (la vie est quand même plus simple). - ou via `ssh` (la vie est quand même plus simple).
* Configurons ça ensemble: - Configurons ça ensemble:
* `ssh-keygen` (mettre un mot de passe si vous voulez) - `ssh-keygen` (mettre un mot de passe si vous voulez)
* copier le contenu de `~/.ssh/id_rsa.pub` dans `preferences->ssh keys` - copier le contenu de `~/.ssh/id_rsa.pub` dans `preferences->ssh keys`
* cliquer sur `Add key` - cliquer sur `Add key`
# Exemple de fonctionnement # Exemple de fonctionnement
...@@ -77,6 +77,7 @@ $ cd tutorial ...@@ -77,6 +77,7 @@ $ cd tutorial
2. Ajout du `premierfichier.c` aux fichiers suivis par git. 2. Ajout du `premierfichier.c` aux fichiers suivis par git.
3. *Commit* du fichier ajouté à l'historique des modifications. 3. *Commit* du fichier ajouté à l'historique des modifications.
4. *Push* de l'état de l'historique sur le serveur. 4. *Push* de l'état de l'historique sur le serveur.
```bash ```bash
[tutorial]$ echo Hello World > premierfichier.c [tutorial]$ echo Hello World > premierfichier.c
[tutorial]$ git status [tutorial]$ git status
...@@ -87,7 +88,7 @@ No commits yet ...@@ -87,7 +88,7 @@ No commits yet
Untracked files: Untracked files:
(use "git add <file>..." to include in what will be committed) (use "git add <file>..." to include in what will be committed)
premierfichier.c premierfichier.c
nothing added to commit but untracked files present (use "git add" to track) nothing added to commit but untracked files present (use "git add" to track)
...@@ -107,7 +108,7 @@ No commits yet ...@@ -107,7 +108,7 @@ No commits yet
Changes to be committed: Changes to be committed:
(use "git rm --cached <file>..." to unstage) (use "git rm --cached <file>..." to unstage)
new file: premierfichier.c new file: premierfichier.c
[tutorial]$ git commit -m "mon premier commit" [tutorial]$ git commit -m "mon premier commit"
[master (root-commit) a4f2052] mon premier commit [master (root-commit) a4f2052] mon premier commit
...@@ -138,14 +139,12 @@ To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git ...@@ -138,14 +139,12 @@ To ssh://ssh.hesge.ch:10572/orestis.malaspin/tutorial.git
## Recommandations ## Recommandations
- Faire des *commits* réguliers (ne pas attendre d'avoir un projet qui fonctionne complètement).
* Faire des *commits* réguliers (ne pas attendre d'avoir un projet qui fonctionne complètement). - Mettre des messages de *commit* qui font du sens.
* Mettre des messages de *commit* qui font du sens. - Éviter d'ajouter de fichiers binaires (prennent de la place).
* Éviter d'ajouter de fichiers binaires (prennent de la place). - Les fichiers binaires sont générables par l'utilisateur du projet.
* Les fichiers binaires sont générables par l'utilisateur du projet. - Éviter de faire `git add .`
* Éviter de faire `git add .` - Utiliser les fichiers `.gitignore` pour se protéger.
* Utiliser les fichiers `.gitignore` pour se protéger.
# Modification de fichiers dans l'historique (1/3) # Modification de fichiers dans l'historique (1/3)
...@@ -164,7 +163,7 @@ Changes not staged for commit: ...@@ -164,7 +163,7 @@ Changes not staged for commit:
(use "git add <file>..." to update what will be committed) (use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) (use "git checkout -- <file>..." to discard changes in working directory)
modified: premierfichier.c modified: premierfichier.c
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
``` ```
...@@ -230,7 +229,7 @@ Changes not staged for commit: ...@@ -230,7 +229,7 @@ Changes not staged for commit:
(use "git add <file>..." to update what will be committed) (use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) (use "git checkout -- <file>..." to discard changes in working directory)
modified: premierfichier.c modified: premierfichier.c
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
``` ```
...@@ -267,10 +266,10 @@ Your branch is up to date with 'origin/master'. ...@@ -267,10 +266,10 @@ Your branch is up to date with 'origin/master'.
Changes to be committed: Changes to be committed:
(use "git reset HEAD <file>..." to unstage) (use "git reset HEAD <file>..." to unstage)
modified: premierfichier.c modified: premierfichier.c
[tutorial]$ git reset HEAD [tutorial]$ git reset HEAD
Unstaged changes after reset: Unstaged changes after reset:
M premierfichier.c M premierfichier.c
``` ```
# Revenir en arrière dans l'historique (4/6) # Revenir en arrière dans l'historique (4/6)
...@@ -288,7 +287,7 @@ Changes not staged for commit: ...@@ -288,7 +287,7 @@ Changes not staged for commit:
(use "git add <file>..." to update what will be committed) (use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) (use "git checkout -- <file>..." to discard changes in working directory)
modified: premierfichier.c modified: premierfichier.c
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
[tutorial]$ git diff [tutorial]$ git diff
...@@ -319,7 +318,7 @@ Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded. ...@@ -319,7 +318,7 @@ Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
(use "git pull" to update your local branch) (use "git pull" to update your local branch)
Changes not staged for commit: Changes not staged for commit:
modified: premierfichier.c modified: premierfichier.c
no changes added to commit no changes added to commit
[tutorial]$ git checkout premierfichier.c [tutorial]$ git checkout premierfichier.c
...@@ -353,12 +352,12 @@ Automatic merge failed; fix conflicts and then commit the result. ...@@ -353,12 +352,12 @@ Automatic merge failed; fix conflicts and then commit the result.
# Un `git push` par erreur # Un `git push` par erreur
* Un `git push` est très difficile à "effacer". - Un `git push` est très difficile à "effacer".
* Cela revient à *réécrire* l'historique de votre projet. - Cela revient à *réécrire* l'historique de votre projet.
* Cela est *dangereux*, surtout quand on travail à plusieurs. - Cela est *dangereux*, surtout quand on travail à plusieurs.
* Le plus simple est de revenir à une version antérieure et faire un nouveau - Le plus simple est de revenir à une version antérieure et faire un nouveau
commit. commit.
* Il existe des techniques *violentes* qu'on verra pas ici. - Il existe des techniques *violentes* qu'on verra pas ici.
# Retirer un fichier du contrôle de version (1/3) # Retirer un fichier du contrôle de version (1/3)
...@@ -377,7 +376,7 @@ Your branch is up to date with 'origin/master'. ...@@ -377,7 +376,7 @@ Your branch is up to date with 'origin/master'.
Changes to be committed: Changes to be committed:
(use "git reset HEAD <file>..." to unstage) (use "git reset HEAD <file>..." to unstage)
deleted: premierfichier.c deleted: premierfichier.c
[orestis@perka tutorial]$ git commit -am "efface donc ce fichier" [orestis@perka tutorial]$ git commit -am "efface donc ce fichier"
[master 8f76d90] efface donc ce fichier [master 8f76d90] efface donc ce fichier
1 file changed, 1 deletion(-) 1 file changed, 1 deletion(-)
...@@ -393,7 +392,7 @@ Changes to be committed: ...@@ -393,7 +392,7 @@ Changes to be committed:
total 0 total 0
[orestis@perka tutorial]$ git reset bbb151324289dc2f85468f5721ec1021692dd216 [orestis@perka tutorial]$ git reset bbb151324289dc2f85468f5721ec1021692dd216
Unstaged changes after reset: Unstaged changes after reset:
D premierfichier.c D premierfichier.c
[orestis@perka tutorial]$ git status [orestis@perka tutorial]$ git status
On branch master On branch master
Your branch is up to date with 'origin/master'. Your branch is up to date with 'origin/master'.
...@@ -402,7 +401,7 @@ Changes not staged for commit: ...@@ -402,7 +401,7 @@ Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed) (use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory) (use "git checkout -- <file>..." to discard changes in working directory)
deleted: premierfichier.c deleted: premierfichier.c
no changes added to commit (use "git add" and/or "git commit -a") no changes added to commit (use "git add" and/or "git commit -a")
``` ```
...@@ -447,28 +446,28 @@ Git voit les fichiers dans trois états possibles: ...@@ -447,28 +446,28 @@ Git voit les fichiers dans trois états possibles:
## Certains fichiers ne doivent pas être *addables* ## Certains fichiers ne doivent pas être *addables*
* Ils doivent *explicitement* être ignorés. - Ils doivent *explicitement* être ignorés.
# Quels fichiers ignorer # Quels fichiers ignorer
On ignore typiquement: On ignore typiquement:
* Les fichiers binaires: exécutables, images, ... - Les fichiers binaires: exécutables, images, ...
* Les produits de compilation: `*.o`, `*.pyc`, ... - Les produits de compilation: `*.o`, `*.pyc`, ...
* Les produits d'exécutions: logs, ... - Les produits d'exécutions: logs, ...
* Les fichiers de configuration d'un IDE: .vscode, ... - Les fichiers de configuration d'un IDE: .vscode, ...
* Les fichiers système. - Les fichiers système.
# Comment ignorer des fichiers? # Comment ignorer des fichiers?
* Créer un fichier texte nommé `.gitignore`. - Créer un fichier texte nommé `.gitignore`.
* L'ajouter au répo git et le "commit". - L'ajouter au répo git et le "commit".
* Y ajouter les règles à suivre pour ignorer les fichiers. - Y ajouter les règles à suivre pour ignorer les fichiers.
Exemple: [^2] Exemple: [^2]
```bash ```console
biden # ignore le fichier biden harris # ignore le fichier harris
*.o # ignore tous les fichier `.o` *.o # ignore tous les fichier `.o`
!trump.o # mais PAS trump.o !trump.o # mais PAS trump.o
sanders # ignore le répertoire sanders sanders # ignore le répertoire sanders
...@@ -477,6 +476,18 @@ sanders # ignore le répertoire sanders ...@@ -477,6 +476,18 @@ sanders # ignore le répertoire sanders
[^2]: Pour une liste plus exhaustive voir le site <https://bit.ly/2HTZJyQ> par exemple. [^2]: Pour une liste plus exhaustive voir le site <https://bit.ly/2HTZJyQ> par exemple.
# Un exemple de fichier `.gitignore`
```console
# Ignore everything
*
# Except .gitignore, Makefile, *.c, *.h
!.gitignore
!*.c
!*.h
!Makefile
```
# Des références # Des références
Il existe énormément de très bons documents et tutoriels en ligne: Il existe énormément de très bons documents et tutoriels en ligne:
...@@ -498,4 +509,3 @@ Et des GUI assez utiles: ...@@ -498,4 +509,3 @@ Et des GUI assez utiles:
# Des questions? # Des questions?
![Internet wisdom.](figs/git_meme.png){width=70%} ![Internet wisdom.](figs/git_meme.png){width=70%}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment