8/14/2013

Dodiff

Ostatnio często muszę robić diffy w gicie i zapisywać je do plików. Przykładowa nazwa pliku z diffem wygląda tak: {branch}-{branch/commit}.diff

Diffy pomiędzy poszczególnymi commitami nie są mi potrzebne. Aby otrzymać takiego diffa można wykonać komendę git diff {branch/commit} > ~/diffs/{branch}-{branch/commit}.diff.
Przykłady:
git diff develop > ~/diffs/develop-master.diff
git diff 66666 > ~/diffs/66666-develop.diff
git diff 18361 > ~/diffs/18361-develop.diff
git diff 47529 > ~/diffs/47529-0dbf4fa.diff
Jak widać jest trochę pisania.
  •  po co za każdym razem wpisywać katalog w którym ma zostać stworzony plik
  • po co podawać nazwę brancha na której właśnie jesteś (i to dwa razy!) ;)
  • pracuj na gałęziach, których nazwy składają się wyłącznie z cyfr to oczopląsu dostaniesz po kilkunastu takich komendach
Dlatego też postanowiłem napisać do tego prostą funkcję w bashu. Założenie było proste, mam podać nazwę funkcji i jako pierwszy parametr przekazać nazwę brancha/commita między którym chcę zobaczyć różnice.

Skrypt ma sam sprawdzić czy jest już katalog diffs w moim katalogu użytkownika, jak nie ma, to niech go tworzy i dodatkowo, niech sam pobiera informację na temat nazwy brancha na którym aktualnie jestem.

Tak powstała funkcja dodiff (ja ją wrzuciłem standardowo do ~/.bash_aliases):
dodiff() {
    if [ ! -d ~/diffs ]; then
        mkdir -p ~/diffs
    fi

    branch=`git rev-parse --abbrev-ref HEAD`
    git diff $1 > ~/diffs/$branch-$1.diff
}
Przykład użycia: showterm.