Installation
Télécharger Git pour Mac ou Windows et ses dépendances (GitGUI, GitBash...) et l'installer.
Installer éventuellement Ungit, une interface graphique sous Node.js (npm install -g ungit) ou SourceTree.
Utilisation
Sur Mac, un peu de couleurs ? Ici
Puis quelques commandes de base :
- git init (initialise le projet) -> un dossier .git est créé, c'est notre dépôt
- git init --bare -> dans un autre dossier, même disant (crée un dépôt type "remote")
- git config --global user.name "Your Name" : pour être identifié
- git config --global user.email "Your email@adress" : idem
- git status (affiche le statut actuel du dépôt)
- git add fichier (ajoute un fichier dans le tracking "WorkSpace")
- git commit -a -m "texte de description" (Envoi des fichiers au dépôt)
- git branch nom_de_la_branche (création d'une branche)
- git branch (affiche la liste des branches) -a (toutes les branches, remote compris)
- git checkout nom_de_branche (change de branche, master est la principale)
- git diff fichier (Affiche les modifs depuis dernier commit)
- git checkout fichier (Récupère la version précédente du fichier)
- git checkout master (roolback de tout le master)
- git log (Affiche l'historique sur la branche en cours) --oneline (pour simplifier) --first-parent nom_de_branche se limite à la branche --graph affiche un graphique
- git tag vx (x est la version - ajoute un tag à un commit)
- git remote add nom url (https://user:pass@github.com/depot) // ajoute un dépôt distant
- git push origin nom_tag : envoie un tag sur dépôt distant. git push --tags : envoie tous les tags
- Un peu de couleurs dans le terminal Mac ? (https://github.com/fabriziocucci/git-bash-for-mac). Sous Windows, utiliser le GitBash
- git fetch nom_tag : récupère un tag sur dépôt distant. git fetch --tags : récupère tous les tags
- git checkout v1 (recharge la v1)
- git reset HEAD fichier (retire un fichier de la liste des fichiers à commiter)
- git stash : réinitialise pour switcher de branche sans commiter
- git rm --cached fichier retire un fichier du dépôt
- gitk : affiche une interface graphique du dépôt
- Fichier .gitignore à la racine du projet avec la liste des fichiers qui ne doivent pas être traqués
- :wq pour quitter une instance
- git revert [n° de commit] permet de supprimer un commit de l'historique
- git reset [n° de commit] revient au commit
- git reset --hard revient à l'état du commit précédent en perdant les modifs depuis
- git reset --soft revient à l'état du commit précédent en gardant les modifs depuis et hors stage
- git reset --mixed revient à l'état du commit précédent en gardant les modifs depuis et prêtes à être commitées
- ungit affiche une interface graphique de l'historique
- git commit --amend revient sur le commit précédent + :q
- git rebase -i HEAD~3 permet de pouvoir grouper plusieurs commits (3 ici)
Dépôt distant
Que ce soit pour Github, GitLab ou Bitbucket, le plus simple est de créer en premier le dépôt distant (avec un fichier read.me pour initialiser le dépôt) et de le clôner en local.
- git clone url_du_dépôt_distant (clone le dépôt distant et crée un dossier de projet avec un dépôt local)
- git pull (récupère les données du dépôt distant) ou git pull origin npm_de_branch
- git push origin branche_locale (Pousse les modifs sur le dépôt distant)
- git push origin -d branche (supprime la branche sur le remote)
- git fetch origin (récupère l'état du dépôt distant)
- git remote (affiche les dépôts distants)
- git diff origin branch (affiche différences entre dépot local et dépôt distant
- git branch -r (branches sur le remote)
Exemple d'interaction en équipe
# en étant sur master, récupérer d'abord la dernière version de master git pull origin master # créer une branche (par feature, par dev, c'est comme vous voulez) git checkout -b nom_branche # faire les modifs qu'on veut # une fois que les commits sont faits, si un autre contributeur a fait des modifications sur master git checkout master git pull origin master git checkout nom_branche # Intégrer les midifs d'une branche dans la master (voir https://git-scm.com/book/fr/v1/Les-branches-avec-Git-Rebaser) git rebase master # résoudre les éventuels conflits git checkout master git merge nom_branche git push origin master # supprimer la branche de travail git branch -D nom_branche # créer une nouvelle branche pour réaliser les nouvelles modifs git checkout -b nom_branche_suivante # etc ... Ou utilisez Gitflow : http://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.html Ou ici : https://makina-corpus.com/blog/metier/2014/un-workflow-git-efficace-pour-les-projets-a-moyen-long-terme
Le remisage
Travailler en équipe impose parfois de devoir changer de branche durant un développement.
Dois-je commiter mon travail avant de changer de branche ? Ca dépend, si une étape a été atteinte, c'est le plus simple. Sinon, ça risque de créer un commit intermédiaire que je devrai réorganiser via un rebase.
La solution peut passer par un "remisage". La commande "git stash" permet de remiser provisoirement son travail. [ici]
Le rebase
Trop de commit tue le commit.... et la compréhension du projet. J'ai commité et me rends compte d'un petit bug. Correction du bug et recommit ? Oui, mais ensuite, un petit rebase permetrra de regrouper ces commit via la commande "git rebase" [ici] et [ici].
Ne jamais rebaser une branche partagée sous peine de modifier l'historique et donc de perdre vos collaborateurs.
Références
- http://www.blogduwebdesign.com/tutoriel-git/tutoriel-git-1-manager-son-projet/696
- Tuto : http://gitimmersion.com/
- UnGit : https://www.grafikart.fr/formations/git/ungit
- En image (https://miro.medium.com/max/1400/1*u4dlEq4sqIT6iHL_Usvwnw.png)
- https://bitbucket.org/
- Un exemple de méthodologie : (https://www.synbioz.com/blog/git-adopter-un-modele-de-versionnement-efficace)
- En image : http://nvie.com/img/git-model@2x.png
- Un autre modèle : http://www.croes.org/gerald/blog/git-modele-de-branche-efficace/649/
- Dépôts distants : https://www.grafikart.fr/formations/git/remote-push-pull
- Interfaces : https://git-scm.com/downloads/guis/
- Principales commandes : https://gist.github.com/aquelito/8596717
- Un bon guide bien complet : https://git-scm.com/book/fr/v1/D%C3%A9marrage-rapide ou https://git-scm.com/book/fr/v2
- Un petit rérérentiel : http://gitref.org/
- Un petit site sympa : http://fr.gitready.com/
- En vitesse : http://rogerdudler.github.io/git-guide/index.fr.html
- Git avec Visual Studio Code : https://code.visualstudio.com/docs/introvideos/versioncontrol
- Exemple de flux : http://danielkummer.github.io/git-flow-cheatsheet/index.fr_FR.html
- Outil : SourceTree, GitKraken
- Ne plus retaper son password GitHub : http://blog.lecacheur.com/2015/11/05/git-le-b-a-ba-memoriser-son-mot-de-passe/