de surviegit à KNP Labs« De tous temps, l’Homme a voulu maîtriser les versions de son code source, tant par rapport au temps qui passe que par rapport à la multiplicité intrinsèque du soi. »
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
>>> Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
>>> Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
>>> Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
git cmd opts args.gitgit help cmd,man git-cmd (faux barbu).git knp).cd un_repertoire_de_travailgit initls -acd .git
ln -s ../.git
git status # 3 f, 2 dirs (et 3 dirs "vides")
git add *[^k] # contenu pour le prochain commit
git status # A -> le .git originelbranches/configdescriptionHEADhooks/PS1=':$( [ $? == 0 ] && echo ") " || echo "( " )'indexstage, contient le patch qui va être commitéinfo/objects/refs/Pourquoi et comment
>>> Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
>>> La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
git pousse à l’intégrité (soft) : « author ».~/.gitconfig ou .git/config.git config alias.al "config --get-regexp alias.*"~/.gitconfig ou .git/config une section [user]name = "mon nom"email = "mon@email.com"git en tapant : git config --global user.name "mon nom"…git commit # Message dans éditeur.
# Un format normalisé.
git cm # Pour un message d’une ligne.
git sl # sl = short log
git s # s = show, montre le commit
# courant par défaut
git st # st = status, ne montre
# ici que des ajouts:
# (`??` bleus).
Rappel : alias git > alias shell.
working copy,
# insertion de blabla en tête de fichier
sed -i '1iblabla' ./description
# ajout de blublu en fin de fichier
echo blublu >> ./descriptiongit st pour voir…A, M, ces couleurs… ?Pourquoi et comment
Les commandes, le dotgit
>>> La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
>>> Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect

.git/index (jaune) est l’intermédiairewc (copie de travail en rouge)repo (dépôt en vert).git diff (ou git d pour les flemmards) diff entre wc et index.git diff montre les modifs de tout à l’heure (./description).Un commit se fait en trois temps :
git add quelque_chose : wc → indexwc vers index au compte-gouttes :git add --patch (alias git ap)git diff --cached (alias git dc) diff entre index et repo.git commit -m (alias git cm) pour mettre le message direct,git commit a tout un tas d’autres options.On peut passer du contenu dans l’autre sens.
index :git reset (cpte-gouttes avec -p)wc.wc :git checkout (cpte-gouttes avec git co -p)git co !À vous ! Un petit commit en trois temps.
./description dans l’index.git add --patch chemin est interactif, la sous-sous-commande ? est utile.git st donne alors deux couleurs à ce fichier, pourquoi ?git d et git dc.Encore un effort :
./description dans l’index,index,wc (uniquement avec git bien sûr).Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
>>> Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
>>> Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
./index et ./COMMIT_EDITMSG..gitignore (glob et tout)..gitignore peut s’auto-ignorer (bof en général, mais là…).
$ echo .gitignore >> .gitignore
$ echo index >> .gitignore
$ echo COMMIT_EDITMSG >> .gitignorelogs, objects et refs et eux seuls dans un même commit.git st nous permet de voir ce qu’il se passe dans .git lors d’un commit :logs,refs.git diff montre que les logs logguent les états de refs/head/master.git cat-file -p 1234 pour observer l’objet stocké dans objects/12/34,
(ou avec les alias : git cf 1234).

git add logs objets refs, git commit).gc.Pour ne pas encombrer git status, on ignore les objects.
$ echo objects >> .gitignore
Si plus tard on veut en ajouter,
$ git add objects
The following paths are ignored by one of your .gitignore files:
objects
Use -f if you really want to add them.
fatal: no files added
$ git add objects -f
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
>>> Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
>>> Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
git commit --amend (alias git amend)git commit --amend -C HEAD (alias git amendc)Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
>>> Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
>>> Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
git rm --cached chemingit filter-branch --index-filter \
"git rm -rf --cached --ignore-unmatch $files" HEAD
git filter-branch --index-filter \
'git update-index --remove $file' BAD_SHA1..HEADgit gc --aggressive --prune.Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
>>> Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
>>> Modifier l’histoire : les rebase
Bisect
objects que nous avons ignorés.

git cherry-pick (alias git cp).
heads).
heads, le dépôt semble être dans cet état.git status.Autre type de rebase, le nettoyage d’une branche.
git rm -r --cached HEAD logs refs
git commit -m "Unversion HEAD, logs and refs."Réinventons nous une histoire avec histoire.sh :
for i in $(seq 1 $1); do;
echo "# ligne $i" >> test.sh;
git add test.sh;
git commit -m "Commit n°$i pour $2.";
done
Script à conserver dans ../histoire.sh, puis à lancer avec
sh ../histoire.sh 20 test_rebase.
Pour contrôler ce qu’il se passe dans logs et refs :
cp HEAD old_HEAD
cp -av logs old_logs
cp -av refs old_refs
Pour un rebase plus ou moins interactif :
git rebase --interactive <vieux_SHA-1> (alias git ri)e),s ou f).git rebase --continue (alias git rc)git rebase --abort (alias git ra)git sl et git show <SHA-1> pour vérifier.git status
diff old_HEAD HEAD
diff -r old_logs logs
diff -r old_refs refshead.Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
>>> Modifier l’histoire : les rebase
Bisect
Pourquoi et comment
Les commandes, le dotgit
La config, mais surtout les alias
Les trois arbres
Les références
Modifier l’histoire : attention
Modifier l’histoire : dé-versionner
Modifier l’histoire : les rebase
>>> Bisect
sh ../histoire.sh 1000 innocent
echo "exit 1" >> test.sh
git commit -am "Commit coupable."
sh ../histoire.sh 100 innocent
git blame test.sh
git bisect start, bad, good HEAD@{1100}
git bisect run sh test.sh
git bisect reset