Git jest obecnie najczęściej używanym przeze mnie narzędziem w pracy. Poza wbudowanym klientem w IDE oraz SourceTree staram się jak najwięcej rzeczy robić z poziomu terminala - takie operacje są dużo szybsze (SourceTree na Windowsie z dużym projektem nie działa najlepiej), a do tego ma się pełną kontrolę nad tym co się dzieje.
Konfiguracja
Konfiguracja parametrów gita odbywa się poprzez użycie git config:
λ git config --global param value
Zamiast --global można użyć flagi --local - w takim przypadku edytowane będą opcje dla obecnego repozytorium, a nie dla całego systemu.
Możliwa jest również bezpośrednia edycja pliku .gitconfig - pod Windowsem znajduje się on w katalogu %UserProfile%. Najprościej użyć flagi --edit:
λ git config --global --edit
Aliasy
Aliasy pozwalają na zastąpienie długich czy często powtarzanych komend krótszymi - zasada działania jest identyczna do tego co oferuje bash. Aby stworzyć alias (przykładowo git s, który będzie tym samym co git status) ogranicza się do wpisania:
λ git config --global alias.s status
Aliasy, których używam najczęściej to:
- git lg - podgląd ostatnich commitów w formie drzewa z jednolinowymi wpisami
λ git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
- git serve - uruchomienie serwera umożliwiającego na dostęp do lokalnej kopii repozytorium z innej maszyny
λ git config --global alias.serve daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths --export-all .git/
λ git serve [7328] Ready to rumble
λ git remote add pc git://192.168.1.2/ λ git checkout -t pc/feature/test-branch
AutoHotkey
Do często powtarzanych fraz używam AutoHotkey, który umożliwia mi rozwinięcie danego tekstu na całą komendę. Rozwiązania tego używałem od dawna, przykładowo do wpisywania numeru konta bankowego (po wpisaniu frazy <mill>). Zastosowanie AHK do Gita podpatrzyłem u Macieja. Zaletą nad aliasami jest to, że przed wykonaniem komendy mogę ją zweryfikować lub zedytować. Dodatkowo działa niezależnie od .gitconfigu, co przydaje się przy pracy przez ssh.
::gts::git status ::gtl::git lg ::gta::git commit --amend --no-edit -a ::gtp::git push ::gtpf::git push --force-with-lease ::gtr::git checkout -- ::gtrhu::git fetch && git reset --hard @{{}upstream{}} ::gtpr::git pull --rebase ::gtmp::git merge --no-ff -
Komendy git status czy git push ograniczają się teraz do wpisania gts i gtp.
Oprócz tego dodałem też takie komendy jak gta (doklejenie obecnych zmian do ostatniego commita) czy gtrhu (reset brancha do wersji remote), które łącznie z git serve pozwalają mi na szybkie robienie zmian na jednym komputerze, a testowanie ich na innym.
gtpf czy gtpr wytłumaczę innym razem przy okazji omawiania git rebase.