Blog

git : quelques astuces de configuration pour vos dotfiles

Cet article est le deuxième de la série des dotfiles. Voir l’article sur vimrc. Nous allons ici aborder quelques configurations indispensables de git.

La base

Si vous utilisez git, vous avez forcément fait des commandes de base pour rentrer votre nom et votre email (indispensable pour pusher vos commits)

$ git config --global user.name "Jango Fett"
$ git config --global user.email "jango.fett@code-troopers.com"

Ceci a pour but d’écrire dans votre fichier ~/.gitconfig ces simples lignes :

[user]
    name = Jango Fett
    email = jango.fett@code-troopers.com

Un peu de couleurs

C’est toujours important d’avoir de la couleur, ça donne bonne mine, ça rend joyeux mais surtout ça aide à la lisibilité. Dans les dernières version de git, la couleur est activée automatiquement, mais vous pouvez toujours la modifier ! Voici un exemple de configuration :

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green
[color "diff"]
    meta = yellow bold
    frag = magenta bold
    old = red bold
    new = green bold
[color "status"]
    added = yellow
    changed = green
    untracked = cyan

gitignore global

Parfois vous arrivez dans un environnement où personne n’utilise IntelliJ, peut-être même que vous voulez cacher le fait que vous utilisez IDEA. Dans ce cas, pas besoin de commiter un .gitignore qui contient .idea et *.iml mettez le plutôt dans ~/.gitignore. Pour que ça marche, vous devrez rajouter dans votre ~/.gitconfig :

[core]
    excludesfile = ~/.gitignore

J’<3 vim

J’aime vim, alors je le met partout. Besoin d’un éditeur de texte pour les commits ? vim !

[core]
    editor = vim

Besoin d’un outil pour faire des diff ? vim !

[merge]
    tool = vimdiff

Montre-nous tes fichiers

Vous avez créé un nouveau répertoire, ajouté plein de fichiers dedans, et vous revenez en console pour voir ce qu’il y a à commiter. Soit un cas d’utilisation quotidien ou presque. Sauf que quand vous faîtes git status seul le répertoire apparaît et pas les fichiers à l’intérieur ! Pour y remédier :

[status]
    showUntrackedFiles = all

Alias

Comme pour les shell, on peut créer des alias de commande. Par exemple :

[alias]
    cp = cherry-pick
    co = checkout
    cl = clone
    ci = commit
    br = branch

C’est plus rapide à taper… un peu, et encore faut s’en souvenir que cp ça fait cherry-pick. Mais certaines commandes sont longues et là ça devient encore plus pertinent :

    last = log -1 --stat
    st = status -sb
    unstage = reset HEAD --
    dc = diff --cached
    pr = pull --rebase
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %Cblue<%an>%Creset' --abbrev-commit --date=relative --all

Je vous laisse essayer celles qui ne sont pas explicite ;)

Les Hooks

Il y a beaucoup d’options et de choses à faire mais je terminerai cet article avec les hooks, qui mériteraient peut-être à eux seuls un article. Un hook −qui se traduit par « crochet »− va intercepter une commande afin de réaliser une action. Par exemple, quand je lance la commande commit, je veux vérifier que tous les tests passent, ou quand je push, je veux mettre à jour automatiquement le ticket jira associé, on peut vraiment tout faire vu qu’il s’agit juste de scripts à rajouter.

On a d’abord besoin de définir le répertoire qui va contenir les hooks. Vous pouvez ajouter dans votre ~/.gitconfig :

[init]
    templatedir = ~/.git_template

Par exemple si vous voulez rajouter un script qui interdit de commiter System.out.println, vous pouvez créer ce fichier : ~/.git_template/hooks/pre-commit J’ai récupéré le mien sur https://github.com/borisguery/git-keywords-checker sur lequel j’ai juste modifié les deux variables KEYWORDS_REGEX et EXTENSIONS_REGEX. Ce qui donne grosso modo dans le fichier :

5 # Add or remove keywords here
6 KEYWORDS_REGEX="printStackTrace\(|FIXME|TODO"
7 # Add extensions to check here
8 EXTENSIONS_REGEX="(.java$|.js$)"

On interdit de commiter printStackTrace( ou FIXME ou TODO dans les fichiers java ou js.

Oui ça paraît un peu violent d’interdire le commit de TODO et FIXME mais on peut passer outre en commitant avec l’option --no-verify et au moins on est au courant donc on n’oublie pas les actions nécessaires selon les équipes de travail (ajout d’un post-it, d’une carte trello etc.)

2 petits détails pour que ça marche :

  • Il faut que le script soit exécutable, donc vous pouvez faire chmod +x ~/.git_template/hooks/pre-commit
  • Ce sera actif uniquement sur les nouveaux dépôts, pour activer le hook sur les dépôts existants, vous devez faire un git init

Si vous voulez d’autres exemples de hooks, vous pouvez commencer par jeter un œil aux hooks de git-flow

comments powered by Disqus

Contact

legos

Code-Troopers

26 bis rue Abraham Bosse
37000 Tours - Fr

contact@code-troopers.com

07 82 28 72 16

Suivez nos actualités