#!/bin/sh cd "$(git rev-parse --show-toplevel)" rm -f "backup.sql" exec "absolute/path/to/mysqldump.exe" --skip-comments -u myuser --password=mypass mydb |sed 's$),($),\n($g' > "backup.sql" exit(Sajnos a google syntax highlighter nincs a helyzet magaslatán, az & gt; helyett képzeljetek oda nagyobb jelet.)
A hook-ban az első sor a shell-t tölti be. Erre azt hiszem nincs szükség, mert a bash ezt alapból megteszi nekünk. Nem tudom, hogy van e lehetőség az ilyen futtatott fájloknál környezet betöltésre, ezt még ki kell tapasztalnom a későbbiekben.
A második sorban a git rev-parse --show-toplevel az aktuális repo root-ját adja. Ehhez előtte egy olyan útvonalat kell beállítanunk a cd-vel, ami benne van az aktuális repo-ban. A kezdő útvonal valószínűeg a git bash alapértelmezett útvonala, tehát a felhasználói könyvtár, ahol megoszott képek meg dokumentumok vannak, szóval az előző blog bejegyzésben leírt bat fájlt majd ki kell egészíteni az útvonal beállítással is, amennyiben ez lehetséges.
A harmadik sorban töröljük a régi sql fájlt. Erre azt hiszem nincs szükség, ahogy kitapasztaltam a .bat fájlokban a > azt jelenti, hogy felülírjuk a régi fájlt, a >> pedig azt, hogy hozzáfűzzük a tartalmat a régi fájl végéhez. Az eredeti kódban, amit átalakítottam erre a formára, benne volt az rm, ezért hagytam meg ebben is.
A negyedik sorban az új sql fájlt hozzuk létre az adatbázis aktuális állása alapján. A --skip-comments -re azért volt szükség, mert a commentek között szerepel többek között a készítés dátuma, ez pedig azt eredményezné, hogy minden egyes dump híváskor megváltozna a fájl függetlenül attól, hogy az adatbázis változott e. A user, password, database részek, illetve a dump fájl megadása evidensek, a sed-es rész pedig azt csinálja, hogy az egy sorba betömörített multi insert-et szépbontja több sorba, így minden egyes rekord-nál külön sorban jelenik meg az esetleges változás. Ennek hasznosságát azt hiszem nem kell hangsúlyoznom...
Nem sokára megpróbálkozom még extrémebb dolgokkal, mint például wsh-ban írt deploy kód futtatásával, és hasonlókkal, egyelőre azonban elég ennyi a parancssorból. :-)