alecharp.fr

Les outils du dev

Au cours d’un développement, on se retrouve toujours avec un même problème : comment je fais pour être plus productif ? A cette question, il y a beaucoup de réponses possibles.


Maven

Maven est un outil de build/gestion de dépendance très utilisé dans le développement surtout web/JEE. Il est bien intégré aux différents IDEs disponibles mais on se retrouve souvent à faire des lignes de commandes pour compiler, tester, packager notre application. Alors certes on fait rapidement des “↑ + enter” pour refaire la même commande 2 fois de suite (ou “!! + enter pour les plus ‘fous’). Cependant, les nouvelles commandes peuvent venir rapidement.

Mettre un -Dmaven.test.skip=true est si vite arrivé ou même un -pl *module-name* -am. Mais comment être sûr du nom du module, ou que l’on n’a pas mis le “skip” avant le “test” ? Et quand bien même on l’écrit correctement, c’est long…

LA solution: ici

Comment l’utiliser ? Disposer d’un terminal BASH, et dans votre ~/.bashrc ou ~/.profile vous mettez :

1
[ -f ~/.bash_completion.bash ] && source ~/.bash_completion.bash || echo "Couldn't load mvn completion"

Évidemment, vous pouvez vouloir mettre à jour ce fichier. Personnellement j’utilise un fichier ~/.bash_funct pour mettre toutes mes fonctions dont celle-ci :

1
2
3
4
5
6
function update_mvn_bash() {
  if [ -f ~/.bash_completion.bash ]; then
    cp ~/.bash_completion.bash ~/.bash_completion-`date +"%Y%m%d%k%M%S"`.bash
  fi
  curl https://github.com/juven/maven-bash-completion/blob/master/bash_completion.bash > ~/.bash_completion.bash
}

N’oublions pas de modifier le ~/.bashrc ou ~/.profile avec:

1
[ -f ~/.bash_funct ] && source ~/.bash_funct || echo "Couldn't load bash functions"

Maintenant la commande update_mvn_bash mettra à jour votre fichier de complétion Maven. Vous pourrez toujours revenir à une version précédente car les anciennes versions du fichiers sont stockées avec le timestamp de la mise à jour.


GIT

Si vous avez la chance de travailler avec GIT, ou que vous allez vous y mettre, un certain nombre de choses peuvent vous simplifier la vie. Pour commencer, je ne saurai trop vous conseiller de ne pas utiliser Windows avec GIT. Mais bon…

Une bonne ligne de commande

Pour utiliser toute la puissance de GIT, il vous faut une ligne de commande. C’est un plus. Afin de travailler plus vite avec votre ligne de commande, que vous y soyez habitué ou non, je vous conseille d’aller faire un tour ici.

Ce qu’il faut retenir de ce très bon article, à mon sens, c’est qu’il faut toujours avoir la possibilité de savoir dans quel état se trouver les sources sur lesquelles on travaille. Ainsi il faudrait avoir dans le shell :

1
?qui? ?où? ?état-git? $

Personnellement j’ai configuré git completion qui me donne ceci :

1
[0] [login] [time] [/path/to/current/folder/shortened (branch-git *%)]

Le gros avantage étant bien sûr de savoir si on a des éléments non commités, sur quelle branch on travaille.

Pour arriver à ça, plusieurs étapes :

  • télécharger git-completion.bash

    1
    
    curl https://raw.github.com/git/git/master/contrib/completion/git-completion.bash > ~/.git-completion.bash

  • modifier le ~/.bashrc ou ~/.profile pour utiliser le fichier ~/.git-completion.bash:

    1
    
    [ -f ~/.git-completion.bash ] && source ~/.git-completion.bash || echo "Couldn't load git completion"

  • modifier votre prompt bash pour y mettre les informations de git:

    1
    2
    
    PROMPT_COMMAND=prompt
    PS1='[${RETC}] [\033[01;34m\u\033[00m] [\033[01;33m\t\033[00m] [\[\033[1;35m\]$newPWD$(__git_ps1 " \[\033[1;34m\](%s)")\[\033[0m\]]\n\$ '

PROMPT_COMMAND peut contenir une commande qui sera exécuté avant chaque affichage du prompt (attention de ne rien faire de gourmand ici). Moi je fais appel à la fonction prompt qui me permet d’avoir la variable $RETC pour connaître le code de sortie de la dernièer commande ainsi d’avoir les 30 derniers caractères du chemin d’accès au dossier courant (cf Annexe 1)

Ce qui est très important dans mon PS1 c'est la partie $(__git_ps1 " \[\033[1;34m\](%s)") qui permet d'afficher (en blue) l'état de git.

Après vous pouvez mettre en place quelques variables d’environnement pour améliorer le rendu de git-completion :

1
2
3
4
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUPSTREAM="git verbose"

  • ligne 1: montre qu’il y a des changement locaux sur la branche
  • ligne 2: montre qu’il y a des éléments locaux non versionnés
  • ligne 3: montre qu’il y a des stashs
  • ligne 4: montre la différence par rapport à la branche distante. Ici git pour ne pas suivre si on utilise aussi git-svn. Et verbose pour avoir un compteur de modification non pusher par rapport à la branche distante.

Quelques aliases

Si vous venez de svn, vous devez savoir que svn ci et svn commit est exactement la même commande. Pour git, ça ne fonctionne pas comme ça. Il vous faut définir les aliases que vous souhaitez utiliser. Pas très compliqué :

1
git config --global alias.alias_name value

ou en éditant le fichier ~/.gitconfig, ou .git/config de votre repository local GIT, dans la section (à créer si nécessaire) [alias].

Personnellement, je vous recommande ces quelques aliases :

  1. ci pour commit
  2. co pour checkout
  3. cb pour checkout -b → changement de branche de travail et création de celle-ci si elle n’existe pas
  4. st pour status → affichage de l’état de la branche
  5. s pour status -s → affichage de l’étage des fichiers de la branche sur une ligne
  6. br pour branch → création d’une branche
  7. ignored pour !git ls-files --others -i --exclude-standard --directory → afficher les dossiers qui sont ignorés (dans le .gitignore)
  8. aliases pour !git config --get-regexp 'alias.*' | colrm 1 6 | sed 's/[ ]/ = /' → afficher la liste des aliases configurés
  9. df pour diff --word-diff
  10. ds pour diff --stat → montre la différence en terme d’ajout/suppression pour le/les fichier(s)

Ces raccourcis sont ceux que j’utilise tous les jours, tout le temps. Le mieux bien sûr c’est de les faire vous-même, ainsi vous saurez ce que vous avez mis et ça vous évitera la vielle blague que l’on fait quand on fait que on découvre la commande alias sous Linux:

1
alias ls='rm -rf'

Mais sinon, allez (courez) sur GitHub et faite une recherche sur gitconfig, vous devriez trouver un certain nombre d’exemples.


Annexes

Annexe 1 : truncate pwd

Merci à Sébastien Douche pour ça!

1
2
3
4
5
6
7
8
function truncate_pwd {
  newPWD="${PWD/#$HOME/~}"
  local pwdmaxlen=30
  if [ ${#newPWD} -gt $pwdmaxlen ]
  then
     newPWD="...${newPWD: -$pwdmaxlen}"
  fi
}