Parcourir les dépôts Git à la recherche de changements non-indexés

16 septembre 2020

Tous les soirs avant d’éteindre mon ordinateur j’essaie de m’assurer que tous les changements que j’ai faites dans mes projets soient “commité”. Si j’ai bossé sur plusieurs choses ça peut être fastidieux de devoir repasser dans chaque projet pour vérifier l’état du dépôt, et je peux en oublier.

Pour me faciliter la vie et éviter les oublis j’ai donc fait un petit script :

repos="$(find ~/src -type d -name .git -exec dirname {} +)"
for repo in $repos; do
    if git -C "$repo" status -s | grep -q .; then
        echo "$repo"
        git -C "$repo" status -s
    fi
done

Je récupère ainsi la liste de tous les dossiers en dessous de ~/src/ qui contiennent un dossier .git, et pour tout ceux pour lesquels la commande git status retourne quelque chose, j’affiche ce quelque chose avec le chemin du dossier.

J’ai ensuite intégré ça dans une fonction de mon .bashrc, que j’exécute avant d’éteindre mon ordinateur et m’assurer que tout est en ordre. J’ai une fonction hello pour le matin, et une bye pour le soir :

# manage dotfiles with git
alias dfg='git --git-dir=$HOME/.local/share/dfg --work-tree=$HOME'

# morning routine shortcut
function hello() {
        echo --- Update dotfiles ---
        dfg pull

        echo --- Update passwords ---
        pass git pull

        echo --- Update system ---
        yay -Syu

        echo --- Check today calendar ---
        khal list today
}

# evening routine shortcut
function bye() {
    echo --- Check repositories status ---
    repos="$(find ~/src -type d -name .git -exec dirname {} +)"
    repo in $repos; do
        if git -C "$repo" status -s | grep -q .; then
            echo "$repo"
            git -C "$repo" status -s
        fi
    done

    echo --- Check password store status ---
    pass git status -s

    echo --- Check dotfiles status ---
    dfg status -s
    dfg log --oneline "${u}..HEAD"

    echo --- Check today calendar ---
    khal list tomorrow
}

Il y a quelques pistes d’amélioration possibles. Par exemple vérifier que tous les changements ont été poussé sur le dépôt distant, ça peut se faire avec git log ${u}..HEAD, mais ça pose problème pour les submodules j’ai l’impression et je n’ai pas encore creuser comment faire ça proprement. Si vous avez des idées n’hésitez pas à m’envoyer ça par email.

Mise à jour 17/09/2020 : un commentaire sur le JdH a porté à ma connaissance un merveilleux outil, git-summary qui fait ça beaucoup mieux que mon bout de script, et qui en fait beaucoup plus également. Testé et joyeusement adopté.


Commenter
Articles de blogs que je lis

40 ans de GNU

40 ans de GNU Richard Stallman ne voulait pas changer le monde. Il ne voulait pas se battre contre les moulins à vent. Il ne voulait pas réinventer la roue. Richard Stallman voulait simplement retrouver ses amis, sa communauté. Pour ce jeune homme barbu et …
Ploum.net · 27 Sep 2023

La blog­chain

Avec les réseaux sociaux, les petits espaces person­nels inter­con­nec­tés qu’é­taient les blogs ont peu à peu disparu du paysage. Il en reste, mais les liens ne sont plus aussi forts. À la grande époque il était fréquent d’avoir des blogroll. sur un coin de c…
Carnet de notes · 8 Sep 2023

#63 : Comment parler du vivant pour mieux l’appréhender

Baptiste Morizot est philosophe, maître de conférences à Aix-Marseille Université et auteur de plusieurs ouvrages sur les relations entre l'humain et le reste du vivant (Les Diplomates, Sur la piste animale, Manières d'être vivant…). En avril dern…
Nourritures terrestres · 13 Aug 2023