$ echo "Hello world" # commande + argument
Hello world # sortie
Lorsque vous utilisez un terminal, vous vous trouvez toujours dans un certain dossier de votre ordinateur.
Si vous exécutez la commande
$ pwd #print working directory
/home/theo/
Vous saurez directement où vous vous trouvez !
Un chemin est comme un fil d'ariane, sous la forme /dossier1/dossier2/dossier3/fichier.txt.
Lorsque le chemin commence par un / cela signifie qu'il est absolu. Autrement dit, c'est un chemin complet depuis la "racine" de votre
disque dur jusqu'a votre position.
Exemple: /home/theo/atelier/cool.txt
Il est aussi possible de définir un chemin relatif a votre position actuelle.
$ pwd # "print working directory" ou "écrire le dossier de travail"
/home/theo
Ici par exemple, on se trouve dans /home/theo.
Le chemin relatif atelier/fichier.txt représente en fait /home/theo/atelier/fichier.txt
REMARQUE: Il est courant de voir la notation ./atelier/fichier.txt qui indique aussi un chemin relatif, puisque . représente le dossier actuel.
ls (pour LiSt)On peut lister tous les fichiers/dossiers dans notre dossier de travail :
$ ls
tux super/
Ou dans un autre dossier :
$ ls super
tux2
cd (Change Directory)On peut changer notre dossier de travail :
$ pwd
/home/theo
$ cd super
$ pwd
/home/theo/super
Et puis encore :
$ ls
tux2
cdOn peut remonter d'un dossier dans l'arborescence :
$ pwd
/home/theo/super
$ cd ..
$ pwd
/home/theo
pwd : Obtenir le dossier de travail.ls : Afficher le contenu d'un dossier.cd : Changer le dossier de travail.5- Hello, World 5+ Hello, Git !
Ceci représente la modification du mot World en Git !
Chaque commit contient un ensemble de modifications comme celle-ci.
Commençons simplement avec un seul commit.
Si on crée un deuxième commit, il sera placé juste après le premier commit.
Les commits sont organisés. Ils se mettent les uns à la suite des autres.
En travaillant, vous allez construire une suite de commits (appelée arbre), contenant toutes les modifications apportées à vos fichiers.
Je modifie → Je commit → Je modifie → Je commit
Avant le commit initial, tous les fichiers sont vides.
Avant le commit initial, tous les fichiers sont vides.
Le HEAD représente l'endroit ou vous vous trouvez actuellement dans l'historique. Le contenu des fichiers que vous avez sur votre ordinateur est défini par l'addition des diffs des commits parents (appliquées chronologiquement).
Donc ici nous verrons les modifications apportées par 0+1+2+3
Si l'on change HEAD vers le commit 2, on pourra voir l'état des fichiers sans les modifications apportées par 3. (Seulement 0+1+2)
Il est donc possible de retourner dans le passé, pour voir l'état des fichiers avant telle ou telle autre modification.
Il manque une dernière pièce avant de pouvoir vraiment utiliser Git, et ce sont les branches.
Une suite de commits ne doit pas forcément être linéaire !

Chaque bifurcation démarre une nouvelle branche.
Dans notre cas, HEAD pointe vers 6, nos fichiers
contiendront les diffs de 0 + 1 + 2 + 5 + 6.
git.Yay ! Si vous avez compris tout ça, on peut continuer.
git config --global user.name "Votre nom"
git config --global user.email "votre@email.com"
git config --global pull.rebase false
git config --global push.autoSetupRemote true
git config --global init.defaultBranch main
Créez votre repo :
$ mkdir cool-repo
$ cd cool-repo
$ git init
Dépôt Git vide initialisé dans /home/###/cool-repo/.git/
Un dépôt vide à été créé avec succès ! Et il ne contient donc aucun commit !
Créons maintenant un fichier, appelé "README.md" (ou autrement, comme vous voulez !)
$ touch README.md
Ensuite, écrivez ce que vous voulez dedans.
(Ouvrez le avec bloc notes, ça marche très bien)
Nous allons maintenant "enregistrer" cette modification dans
le dépôt git.
Working Repo
Local Git Repo
Working Repo
Local Git Repo
Working Repo
Local Git Repo
$ git add chemin/vers/mon/fichier
Working Repo
Local Git Repo
Vous pouvez visualiser le stage avec:
$ git diff --staged
Et vous pouvez visualiser ce qui reste à y ajouter avec :
$ git diff
Working Repo
Local Git Repo
Vous pouvez nettoyer le stage avec:
$ git reset
Working Repo
Local Git Repo
Vous pouvez effacer tous vos changements avec:
$ git restore
Cette opération modifiera les fichiers, vous perdrez donc tout le travail accompli !
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: fichier-modifié-et-staged
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: fichier-modifié-mais-pas-stageed
Untracked files:
(use "git add <file>..." to include in what will be committed)
nouveau-fichier
no changes added to commit (use "git add" and/or "git commit -a")
Working Repo
Local Git Repo
Bref, une fois que tous vos changements sont sur le stage...
(il peut y en avoir autant que vous voulez)
Working Repo
Local Git Repo
Vous pouvez commit vos changements.
$ git commit -m "Modification de README.md" # Utilisez -m pour ajouter un titre au commit !
$ git log
commit 3e54... (HEAD -> main, origin/main, origin/HEAD)
Author: Tux <info@louvainlinux.org>
Date: Thu Feb 29 14:06:18 2024 +0100
Dernier commit
commit de92ddfcc4f6c9e06dfc148f681e35aeca32ac01
Author: Tux <info@louvainlinux.org>
Date: Thu Feb 29 14:05:25 2024 +0100
Premier commit
Mais comment "envoyer" nos changements ?
$ git push
Et si maintenant quelqu'un d'autre a commit des changements entre temps ?
$ git pull
Ajouter vos changements au stage
$ git add -A
Commit les changements vers le dépôt git local
$ git commit -m "j'ai fait un changement"
Ajouter les changements au dépôt git distant
$ git push
Récupérer les changements faits par d'autres contributeurs
$ git pull
Status: Pas encore OK
Démo en live de ce que je viens d'expliquer.
Assurez-vous de bien être dans le dossier de votre repo :
$ pwd
/home/tux/repo-##
Afin de pouvoir travailler en collaboration, il va falloir ajouter un dépôt distant !
$ git remote add origin
Le nom origin est une convention, mais vous pouvez toujours choisir !
README.mdgit add README.mdgit commit -m "descriptif de mes changements"git pushStatus: Pas encore OK
Status: Pas encore OK
Contexte : quelqu'un a push des changements après vous.
Essayez de faire un nouveau commit.
$ git push
[main 7c64a36] test
To https://git.louvainlinux.org/repo-##
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://git.louvainlinux.org/repo-##'
hint: Updates were rejected because the remote contains work that you do not
hint: have locally. This is usually caused by another repository pushing to
hint: the same ref. If you want to integrate the remote changes, use
hint: 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
git pulllsgit log et vous verrez qu'un commit a été ajouté avant le votre.git pushStatus: Pas encore OK
Status: Pas encore OK
Contexte : quelqu'un a push un commit qui a modifié quelque chose qu'un commit à vous a aussi modifié.
youpi.txt vers ce que vous voulez.git pushgit pull$ git pull
Auto-merging youpi.txt
CONFLICT (content): Merge conflict in youpi.txt
Automatic merge failed; fix conflicts and then commit the result.
youpi.txt et gardez ce que vous voulez :<<<<<<< HEAD
# Mon nouveau titre
=======
PILOU PILOU
>>>>>>> main
git add youpi.txt
git commit -m "merge: Merge from main"
git push
Status: Pas encore OK
Pour cette partie de la présentation, construisez des groupes de 2.
Choisissez le dépôt que vous préférez - vous allez à présent tous les deux travailler dessus.
Votre partenaire va devoir cloner votre dépôt (ou vous devrez cloner le sien le cas échéant)
$ git clone
Faites en sorte qu'il y ait un merge conflict :
Ensuite, inversez les rôles !
main.On peut voir une liste des branches :
$ git branch
* main
branch2
L'étoile indique sur quelle branche on est.
On peut changer notre branche courante :
$ git checkout branch2
$ git branch
main
* branch2
On peut créer une nouvelle branche et la sélectionner comme branche courante en une seule manipulation :
$ git checkout -b branch3
$ git branch
main
branch2
* branch3
On peut visualiser les branches :
$ git log --oneline --decorate --graph --all
# C'est un peu trop long pour taper ici,
# regarder plutôt la jolie image à droite.
On peut merge une branche :
$ git checkout main
$ git merge branch2
$ git merge branch3
Et l'effacer ensuite :
$ git branch -d branch2
$ git branch -d branch3
Recette de cookies: 1. 1 oeuf - 2. carottes + 2. du chocolat 3. 500g de farine 4. Herbes de provence
Recette de cookies: 1. 1 oeuf - 2. carottes + 2. du beurre 3. 500g de farine 4. Herbes de provence
On peut push nos branches pour les utiliser autre part :
$ git push

.gitignoreFichier à la racine du dépôt qui contient une liste des chemins à ignorer lors des stagings :
je/veux/surtout/pas/commit/ce/dossier
# "*" veut dire "main.o", mais aussi "dfkjghdkfg.o"
# ou encore "sedidhoi.o"
*.o
git diff les affichera même en rouge pour ne pas passer à côté :\n) à la dernière ligneSur VS Code, ajouter dans settings.json :
{
"files.insertFinalNewline": true
}
Pourquoi ce n'est pas activé par défaut ? Un mystère...
Important car sinon une diff qui ajoute une ligne en modifiera deux, vu qu'il faut aussi ajouter un retour à la ligne à la précédente.
Maintenant on va mettre ce que vous avez appris en pratique !
$ ssh-keygen -t ed25519 -P "" # Il est recommandé de protéger la clé par mot de passe en retirant ce qui suit (et inclus) le -P
# Appuyez sur ENTER
$ cat ~/.ssh/id_ed25519.pub
Copier la sortie de cette commande.
Une fois dans les paramètres, allez sur "SSH and GPG keys".
Appuyez sur "New SSH key".
Collez votre clef SSH public.
Soyez sûr de bien copier id_ed25519.pub et pas id_ed25519 !
$ git remote
origin
$ git remote add github ssh://git@github.com/tux/mon-repo
$ git remote
origin
github
$ git push github
Démo en live de ce que je viens d'expliquer.
On va utiliser https://github.com/firstcontributions/first-contributions, qui est un projet construit pour présenter aux gens les contributions Open Source.
$ git clone ssh://git@github.com/tux/first-contributions
$ cd first-contributions
Ajoutez votre nom ou ce que vous voulez au fichier README.md.
$ git add README.md
$ git commit -m "Mes changements"
$ git push

Démo en live de ce que je viens d'expliquer.
git add -pgit commit --amendgit blamegit reset HEAD~1Les slides sont disponibles en ligne :
Would like to make this pure html to make it easy to change
Hors sujet ?