Ceci est une ancienne révision du document !
Git
“JE VAIS VOUS LE DIRE FRANCHEMENT : Git est exaspérant.
Attendez ! Ne partez pas tout de suite. Oui, Git est insupportable. Mais il est également indispensable”1)
Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, le créateur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2.
Une très intéressante contribution du journaliste scientifique Clay Shirky, Comment internet transformera un jour le gouvernement?, qui évoque git et la possibilité (toute théorique) de l'utiliser comme outil législatif et budgétaire: https://www.ted.com/talks/clay_shirky_how_the_internet_will_one_day_transform_government
Install
sudo apt-get install git-core gitk
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
git config --global user.name "PSEUDO"
git config --global user.email EMAIL
vi ~/.gitconfig
[color]
diff = auto
status = auto
branch = auto
[user]
name = zpartakov
email = zpartakov@akademia.ch
[alias]
ci = commit
co = checkout
st = status
br = branch
Gérer ses fichiers de config avec git
Mémoriser la connexion
Mettre les clés ssh nécessaires puis sur chaque client:
git config --global user.name "<username goes here>"
Forcer le push
sur le serveur avec le dépôt
git config receive.denyCurrentBranch ignore
Basics
Les commandes de base
fork then
git remote add origin git@github.com:USER/PROJECT.git
git pull git@github.com:USER/PROJECT.git git st git add... hg commit -m "comment" git push git@github.com:USER/PROJECT.git https://github.com/zpartakov/vamosAcomer git log #details d'un commit git show 0943dce3be9c4a0f21c397f62ea18f78a4bcea26
Rollback
Revenir en arrière d'un commit
git reset --hard HEAD^
Revenir en arrière sur un commit spécifique
git reset --hard 13e8d052383d96c1cdfef188ede3dd4fdffd53ad
ou 13e8d052383d96c1cdfef188ede3dd4fdffd53ad est le numéro du commit
Chercher / search function
git log --patch | less +/searching_string
chercher les revisions d'un auteur “Jon”
git log --author=Jon git grep [motifDeRecherche]
si on veut chercher ds ttes les versions
git log -p grep ...
Branch: "forker" en créant une branche
Clone project:
git clone git@example.com:project-name.git
Create branch with your feature:
git checkout -b $feature_name
Write code. Commit changes:
git commit -am "My feature is ready"
Push your branch to GitLab:
git push origin $feature_name
voir https://docs.gitlab.com/ee/gitlab-basics/feature_branch_workflow.html#feature-branch-workflow
Cloner une branche spécifique
git clone -b my-branch https://git@github.com/username/myproject.git
exemple, cloner la branche stable de limesurvey et la mettre à jour
git clone -b 2.06lts git@github.com:LimeSurvey/LimeSurvey.git git pull git@github.com:LimeSurvey/LimeSurvey.git 2.06lts
Renommer la branche master de votre dépôt Git en main
Si vous avez un peu suivi le débat en informatique on a plus le droit de dire master et slave paske c'est mal. Donc maintenant faut dire main et… en fait je sais pas: soumis? Je crois c'est secondary
En tout cas, certains providers git exigent maintenant qu'on appelle la branche principale master.
Comment changer: https://andycostanza.gitlab.io/blog/fr/posts/2022/renommer_master_en_main_avec_git/
Thks, Andy C.!
Supprimer un fichier sensible
git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \ --prune-empty --tag-name-filter cat -- --all
git commit git push origin --force --all
Sous-modules
Pour avoir tous les sous-modules d'un repository git
git submodule update --init --recursive
Sécurité
sécuriser répertoire .git
clés ssh
Si vous avez un méchant message lors d'un pull ou d'un push genre:
Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Déclarer les clés dans la section Deploy Keys pour le dépot:
https://gitlab.com/yourName/yourRepo/-/settings/repository
Voir l'onglet “Clefs de déploiement à accès privé”
How to use "git clone" with a custom SSH key
Sometimes you need to clone a Git repo with a different SSH key.: https://ralphjsmit.com/git-custom-ssh-key
Versions (tag)
Versions paquet zip/tarball to download with source code
git tag -a v1.0 #changer pour la bonne version git push --tags [optional git repo]]
Tutoriels
- http://raspbian-france.fr/introduction-versioning-git/ (excellent tuto avec reveal.js, voir au bas de la page ou direct http://raspbian-france.fr/cours/slides-git.html)
- https://ohshitgit.com/fr Et merde, Git!?!
Bouquins
git GUI
des clients graphiques pour git
Gitcraken / git GUI
gitcraken, un client graphique simple à configurer pour voir vos projets git
source: http://www.gitkraken.com/
qgit
qgit version graphique
GitLab
Version web libre de git avec une vue kanboard
c'est le plus simple si vous ne voulez pas installer tout le tintouin…
Mon espace gitlab: https://gitlab.com/zpartakov
Fork
Merge / Merging request
Groups
Todos / Issues
Système de ticketing de gitlab
Utiliser gitlab comme outil collaboratif de gestion de projet/tâches
- https://docs.gitlab.com/ee/user/todos.html gitlab todos
Doc
- GitLab Flow (beginner) - the basics of git and GitLab
- 8 Tips (intermediate) - become more efficient with Git
- GitLab CI (advanced) - quick-start guide to continuous integration
Local install
Github
Github -> gitlab
Github a été racheté par MS. C'est donc mal. On peut facilement migrer ses dépôts sur gitlab, qui est libre et opensource: Switching from GitHub to GitLab.
Si on veut faire manuellement: créer le repository dans gitlab (on peut cloner le repository de github) puis:
exemple avec mes recettes de cuisine
git pull git@gitlab.com:zpartakov/recipesCakePHP.git #soit le répertoire créé recipesCakePHP mv ~/recettes/.git ~/recettes/.git.old mv recipesCakePHP/.git ~/recettes cd ~/recettes git remote add gitlab git@gitlab.com:zpartakov/recipesCakePHP.git git push -f --tags gitlab refs/heads/*:refs/heads/* puis comme d'hab avec git
Et si vous voulez qu'on vous voie toujours sur windaube, ben suffit de laisser votre repo ouvert et de pointer depuis sur vos repos ouverts, ex: https://github.com/zpartakov
Flux RSS de github
GitHub provides some official RSS feeds officially:
Repo releases: https://github.com/:owner/:repo/releases.atom Repo commits: https://github.com/:owner/:repo/commits.atom User activities: https://github.com/:user.atom Private feed: https://github.com/:user.private.atom?token=:secret (You can find Subscribe to your news feed in dashboard page after login)
Credits: https://stackoverflow.com/questions/7353538/setting-up-a-github-commit-rss-feed#7353586
Tips
gitlab-api
Trouver les gros fichiers
git rev-list --objects --all \ | git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \ | sed -n 's/^blob //p' \ | sort --numeric-sort --key=2 \ | tail -n 10 \ | cut -c 1-12,41- \ | $(command -v gnumfmt || echo numfmt) --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest
Voir aussi
- Clay Shirky : Comment internet transformera un jour le gouvernement (Git et la démocratie) une vidéo assez drôle sur la possible (l'impossible) utilisation de gitlab auprès des politicien·nes et des citoyen·nes.

