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. wikipedia 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 cloner un repo (double window CLI / FS_Browser)
Etape 1 : "naviguer"
git clone git@github.com:mxbossard/mass.git git branch git branch -r git switch develop git branch git status git log git log --pretty=oneline --abbrev-commit --graph --decorate git diff git diff HEAD git diff HEAD^
Etape 2 : "modifier"
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
- 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
Decentralisé
pas besoin de repo central tous l'historique en local peut commiter en local reconciliation peut être compliqué si plusieurs personnes modifie le meme fichier
Commit Hash (sha1)
Hash des données et meta-données contenu dans le commit. Une représentation du commit réputé unique dans un repo.
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 2 travailler avec git
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
Creer un repo sur une forge et plugger le repo remote sur notre repo local 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
Forges git
Public
- framagit.org
- gitlab.com
- github.com
A déployer
TODO
Interets
- Des outils graphiques en plus (diff, ...)
- Un repo central souvent plus pratique pour callaborer
- Fork & Pull Request organisé
- Pipelines
- Pages
- ...
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