Ceci est une ancienne révision du document !
Table des matières
Workshop Git : initiation
Presentation
L' outil de gestion de versions le plus populaire au monde.
Il est décentralisé : on a pas besoin d'un serveur pour l'utiliser.
Usages
- Historiser des modifications de fichiers
- Comparer des versions (principallement des fichiers textes)
- Collaborer
Disclaimer
- Plusieurs manières différentes de faire certaines actions
- Lire les indication donnés par git qui sont très très très très utiles
- Votre moteur de recherche préféré + stackoverflow sont vos amis pour trouver quoi faire en toute situation
help
- git help
- man git
- tldr git ?
Tuto 1 : débuter en clonant un dépôt git existant (double window CLI / FS_Browser)
git clone git@github.com:mxbossard/mass.git git branch git branch -r git switch develop git branch git log git log --pretty=oneline --abbrev-commit --graph --decorate git hist ORIG_HEAD.. --stat --no-merges
Tuto 2 : modifier des fichiers comparer et commit les modifications
git status git diff git diff HEAD git diff HEAD^ echo foo > bar echo baz >> README.md git status git diff git add . git status git diff git diff --staged git commit -m "ma modif" git log git diff git diff HEAD git diff HEAD^
Mot clés
- repo : repository ou dépôt en français : espace de stockage git (peut être local ou distant)
- commit : collections de fichiers & dossiers représentés par un hash (sha1)
- worktree / working tree / working directory : repertoire de travail qui reflete le contenu d'un commit
- index / staging area : zone tampon qui stoque des modification en attente de commit
- HEAD : pointeur vers le commit du working tree
- tag: pointeur vers un commit
- branch : pointeur "mouvant" vers un commit
Fonctionnement
Décentralisé
- Pas besoin de repo central
- Tout l'historique en local
- On peut commit dans son repo local
- La réconciliation peut être compliqué si plusieurs personnes modifie le même fichier simultanément (classique, ce n'est pas magique)
Commit Hash (sha1)
Hash des données et méta-données contenu dans le commit. Une représentation du commit réputé unique dans un repo.
- exemple de hash : f8f3f58c67b5be45cc4595d0dace0728f5c9c9bf
- exemple de short hash : f8f3f58
Index
zone tampon qui permet de construire un nouveau commit
diff comme patch
les git diff permette de produire des fichiers patch qui peuvent être appliqués à la main
Tuto 3 : Initialiser son propre dépôt git et travailler dessus
git init myrepo cd myrepo touch myfile git commit -a -m message echo foo > myfile git commit -a -m foo echo bar > baz git checkout -b develop git commit -a -m baz echo bar >> baz git status git stash git status git stash list git switch master git status git switch develop git stash apply git commit -m -a "baz2" git tag 0.0.1 git tag git checkout HEAD^ git checkout HEAD^^ git checkout 0.0.1 git switch develop
Forges git
Public
- framagit.org
- gitlab.com
- github.com
A déployer
TODO
Intérêts
- Des outils graphiques en plus (diff, ...)
- Un repo central souvent plus pratique pour callaborer
- Fork & Pull Request organisé
- Pipelines
- Pages
- ...
Tuto 4 : Creer et suivre (track) un remote repo (dépôt distant) sur une forge git
TODO git remote git push
Quoi commit ?
.gitignore file
A commit
- des sources
- des test
- des configurations applicatives
A ne pas commit
- des binaires
- des fichiers temporaires
- la configuration de son IDE
Travail collaboratif
Lorsqu'on travail à plusieurs, Il est important de synchroniser sont repo local le plus souvent possible pour éviter de trop grosses divergences.
A plusieurs, il est toujours compliqué de travailler simultanément sur les même fichiers. Lorsque c'est possible, il vaut mieux s'attribuer à chacun une compétence sur des fichiers différents
Git flows
TODO
- Pour travailler seul et surtout a plusieurs nécéssaire de se mettre d'accord sur un procéssus
- Expliqué une propal de git flow
- Linker d'autres git flows
Reset, Restore, Revert
TODO
Merge vs Rebase ?
TODO
Trucs utiles
git config
Alias tiptop
git config --global alias.s status git config --global alias.who shortlog -sne git config --global alias.changes diff --name-status git config --global alias.dic diff --cached git config --global alias.d diff --stat git config --global alias.hist log --pretty=oneline --abbrev-commit --graph --decorate git config --global alias.lc !git hist ORIG_HEAD.. --stat --no-merges git config --global alias.amend commit --amend git config --global alias.undo git reset --soft HEAD^ git config --global alias.spull !__git_spull() { git pull "$@" && git submodule sync --recursive && git submodule update --init --recursive --remote; }; __git_spullgit config --global alias.spush push --recurse-submodules=on-demand
authent avec ssh
ssh keygen ?
git init --bare
TODO