Git

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

Créer un dossier de site et se placer dedans dans le Terminal.
En Windows : clic droit sur le dossier -> Git Bash Here (la console s'ouvre).
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.

On peut installer Git sur n'importe quel serveur (web y compris) et l'utiliser comme dépôt distant, notamment pour faire le déploiement du site.
  • 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
un plan de dev en git

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

Laisser un commentaire