Astuces Zsh - Les plugins Git de Oh My Zsh

Publié le 9 juin 2015 par Nicolas Cavigneaux | système

Cet article est publié sous licence CC BY-NC-SA

Dans le dernier article sur ZSH, je vous ai expliqué pourquoi choisir ZSH et quelques exemples de ses fonctionnalités principales.

Je vous ai également parlé rapidement de Oh My Zsh qui permet d’étendre encore les capacités de ZSH.

Entrons maintenant dans le détail avec la présentation des plugins Oh My Zsh dédiés à l’utilisation de Git qui vous permettront d’améliorer votre productivité et d’utiliser cet outil plus facilement.

Avant toute chose, assurez-vous que vous avez installé Oh My Zsh. Si ce n’est pas le cas, référez-vous à l’article précédent.

Le plugin “git”

Le tout premier plugin à activer se nomme simplement “git”. Vous pouvez l’activer en l’ajoutant à la liste de la variable plugins présente dans votre fichier de configuration ~/.zshrc.

Vous devrez donc avoir quelque chose comme :

plugins=(… git …)

Les points de suspension ne sont pas à inclure et ne sont ici que pour représenter d’éventuels autres plugins activés.

Maintenant que ce plugin est ajouté, il vous faut recharger votre configuration soit en lançant un nouveau terminal, soit en sourçant votre fichier de config dans votre terminal actuel:

$ source ~/.zshrc

Vous avez maintenant à disposition de nombreux alias très utiles ainsi qu’une complétion améliorée.

Vous pouvez vérifier ça à l’aide de la commande :

$ alias | grep git

Laissez moi passer en revue ceux qui me semblent être les plus utiles au quotidien.

Quelques caractères gagnés sont toujours bons à prendre :

$ g init # équivalent à 'git init'
$ g clone ssh://user@host:~/repo.git # équivalent à 'git clone ssh://user@host:~/repo.git'

Les alias de mise à jour du dépôt distant :

$ gl # équivalent à 'git pull'
$ gp # équivalent à 'git push'

Les alias de vérifications du statut :

$ gst # équivalent à 'git status'
$ gss # équivalent à 'git status -s'

$ gd # équivalent à 'git diff'
$ gdc # équivalent à 'git diff --cached'

Les alias de remise à zéro :

$ grh # équivalent à 'git reset HEAD'
$ grhh # équivalent à 'git reset HEAD --hard'
$ gclean # équivalent à 'git reset --hard && git clean -dfx'

Les alias de commit :

$ ga # équivalent à 'git add'

$ gc # équivalent à 'git commit -v' très utile lors de l'écriture de votre message de commit puisque vous voyez le diff directement dans votre éditeur
$ gc! # équivalent à 'git commit -v --amend'

$ gca # équivalent 'à git commit -v -a'
$ gca! # équivalent à 'git commit -v -a --amend'

Les alias de gestion des branches :

$ gco # équivalent à 'git checkout'
$ gcm # équivalent à 'git checkout master'

$ gb # équivalent à 'git branch'
$ gba # équivalent à 'git branch -a'
$ gbr # équivalent à 'git branch --remote'

$ grbi # équivalent à 'git rebase -i'
$ grbc # équivalent à 'git rebase --continue'
$ grba # équivalent à 'git rebase --abort'

Les alias de visualisation de l’historique :

$ glg # équivalent à 'git log --stat --max-count=10'
$ glgg # équivalent à 'git log --graph --max-count=10'
$ glgga # équivalent à 'git log --graph --decorate --all'
$ glo # équivalent à 'git log --oneline --decorate --color'
$ glog # équivalent à 'git log --oneline --decorate --color --graph'

Les alias de gestion des “stash” :

$ gsta # équivalent à 'git stash'
$ gstp # équivalent à 'git stash pop'

Les alias divers :

$ gcount # équivalent à 'git shortlog -sn', pratique pour connaître l'activité relative de chaque contributeur
$ gcp # équivalent à 'git cherry-pick'
$ gwc # équivalent à 'git whatchanged -p --abbrev-commit --pretty=medium' pour une vision détaillée mais compacte de chaque commit

Le plugin “git-flow”

Le plugin suivant à activer se nomme “git-flow”. Ce plugin contient quelques alias mais surtout de la complétion avancée pour l’extension Git Flow.

Si vous ne connaissez pas ou n’utilisez pas cette extension, je vous conseille vivement de vous y intéresser en commençant par lire mon article sur le sujet.

Voici donc les alias qu’ajoute ce plugin :

$ gf # équivalent à 'git flow'
$ gcd # équivalent à 'git checkout develop'
$ gch # équivalent à 'git checkout hotfix'
$ gcr # équivalent à 'git checkout release'

Au delà de ces alias c’est surtout la complétion apportée par ce plugin qui est intéressante:

git-flow completion

git-flow completion

git-flow completion

On a donc accès via la complétion à l’ensemble des fonctionnalités de Git Flow, le listing automatique des branches pertinentes en fonction du contexte, etc.

Ça simplifie beaucoup la vie, notamment pour les nouveaux venus à Git Flow.

Le plugin “gitignore”

Le plugin “gitignore” est très simple puisqu’il ne fait qu’appeler un web service capable de retourner un fichier .gitignore adapté en fonction du type de projet.

Vous ne l’utiliserez sûrement pas au quotidien mais il peut s’avérer bien pratique.

$ gi list

vous retournera une énorme liste des possibilités : système d’exploitation visé, IDE, langage ou framework.

Il vous suffit ensuite de faire votre choix pour avoir en retour un .gitignore adapté :

$ gi ruby
# Created by https://www.gitignore.io

### Ruby ###
*.gem
*.rbc
/.config
/coverage/
/InstalledFiles
/pkg/
/spec/reports/
/test/tmp/
/test/version_tmp/
/tmp/

## Specific to RubyMotion:
.dat*
.repl_history
build/

## Documentation cache and generated files:
/.yardoc/
/_yardoc/
/doc/
/rdoc/

## Environment normalisation:
/.bundle/
/vendor/bundle
/lib/bundler/man/

# for a library or gem, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# Gemfile.lock
# .ruby-version
# .ruby-gemset

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
$ gi mercurial
# Created by https://www.gitignore.io

### Mercurial ###
/.hg/*
*/.hg/*
.hgignore
$ gi osx
# Created by https://www.gitignore.io

### OSX ###
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

Pour finir

Les utilisateurs au quotidien de Github qui créent beaucoup de dépôts et de forks seront intéressés par le plugin “github” qui simplifie ces tâches depuis la ligne de commande.

Quoi qu’il en soit, je vous invite à essayer ces différents alias et complétions pendant quelques jours et vous verrez que vous ne vous en passerez plus.


L’équipe Synbioz.

Libres d’être ensemble.