En effet, sur la même machine, je peux être amené à travailler sur un repository personnel (le week-end ou le soir) ou sur un repository de l'entreprise qui m'emploie (en journée).
De là, j'ai découvert qu'on pouvait indiquer la date de commit et la date d'auteur à git... J'ai trouvé ça plus amusant de présenter un script qui modifie l'heure du commit (par defaut 19:00 + X).
Comment le mettre en place
Tout d'abord, dans le fichier .bash_aliases, je crée un alias qui surcharge la commande git :
alias git="~/bin/alias-git.sh"Ensuite dans le répertoire ~/bin je crée le fichier alias-git.sh avec le contenu suivant :
#!/bin/sh COUNTER_FILE="${HOME}/bin/.counter_date" get_counter() { # Read counter file if [ -f "${COUNTER_FILE}" ]; then # Check if file is same day that today COUNTER_FILE_DATE=$(date -r "${COUNTER_FILE}" +"%Y%m%d") CURRENT_FILE_DATE=$(date +"%Y%m%d") if [ "${COUNTER_FILE_DATE}" -eq "${CURRENT_FILE_DATE}" ]; then COUNTER=$(cat "${COUNTER_FILE}") COUNTER=$(expr ${COUNTER} + 1) else # Reinit counter file COUNTER=0 rm -f "${COUNTER_FILE}" fi else COUNTER=0 fi } # Check only if git commit if [ "$1" = "commit" ]; then if [ -d '.git' ]; then GIT_LOCAL_CONFIG=$(git config --list --local) IS_GITHUB_REPOSITORY=$(echo ${GIT_LOCAL_CONFIG} | grep 'github') IS_EMAIL=$(echo ${GIT_LOCAL_CONFIG}| grep 'user.email') IS_USERNAME=$(echo ${GIT_LOCAL_CONFIG} | grep 'user.name') if [ -n "${IS_GITHUB_REPOSITORY}" ]; then if [ -n "${IS_EMAIL}" ] && [ -n "${IS_USERNAME}" ]; then echo "** Changer happy hour ! **" get_counter # Take today, set hour to 19:00 and add minutes NEW_DATE=$(date -d "19:00 today + ${COUNTER} minutes" +'%Y-%m-%d %H:%M:%S') export GIT_COMMITTER_DATE="${NEW_DATE}" export GIT_AUTHOR_DATE="${NEW_DATE}" else echo "fatal: this is github repository without username and email set !" >&2 exit 255 fi fi else echo "fatal: not a git repository: .git" >&2 exit 128 fi fi git "$@" RESULT=$? unset GIT_COMMITTER_DATE unset GIT_AUTHOR_DATE # Counter set, save it only if git OK if [ -n "${COUNTER}" ] && [ ${RESULT} -eq 0 ]; then echo "${COUNTER}" > "${COUNTER_FILE}" fi exit ${RESULT}
Comment ça fonctionne
Le script regarde la commande git qui est exécutée. S'il s'agit de la commande commit, elle fait quelques vérifications :
- Est-on sur un repository Github ?
- Est-ce le user et email est configuré ? Si ce n'est pas le cas, le script s'arrête en erreur.
- Le script va lire un compteur.
- La date de commit est le jour même mais avec l'heure de départ 19:00 à laquelle j'ajoute le compteur en tant que minute.
Cela signifie donc qu'à chaque commit sur un repository Github, le compteur est incrémenté de 1. Les commits seront horodatés : 19:00, 19:01, 19:02...
Ce que j'ai appris
Ce script m'aura permis d'apprendre de nouvelles choses sur git et comment manipuler/calculer les dates/heures en shell comme je ne l'avais jamais fait.
J'ai pu découvrir qu'il y avait 2 dates pour un commit et qu'on pouvait les spécifier avec GIT_COMMITTER_DATE et GIT_AUTHOR_DATE.