Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
git_tutorial
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
orestis.malaspin
git_tutorial
Commits
e16d117b
Verified
Commit
e16d117b
authored
6 months ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
updated for 2024
parent
81edc0f2
No related branches found
No related tags found
No related merge requests found
Pipeline
#36326
passed
6 months ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
git_tutorial.md
+68
-58
68 additions, 58 deletions
git_tutorial.md
with
68 additions
and
58 deletions
git_tutorial.md
+
68
−
58
View file @
e16d117b
...
@@ -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?

{width=70%}

{width=70%}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment