Git používám od začátku primárně z příkazové řádky. Už mě fakt nebavilo furt dokola psát git status, git commit, git checkout atd. Určitě nejsem sám a nemá cenu vymýšlet kolo. Zeptal jsem se Googlu, neví-li o nějakých hotových aliasech pro .bashrc a kupodivu věděl.
Našel spoustu případů, kdy se o definici aliasů pro git někdo snažil. Použil jsem aliasy z tohoto webu a přidal nějaké vlastní.
#git aliases
alias gs='git status'
alias ga='git add'
alias gb='git branch'
alias gc='git commit'
alias gcm='git commit -m'
alias gd='git diff'
alias go='git checkout'
alias gob='git checkout -b'
alias gk='gitk --all&'
alias gss='git remote update && git status'
alias got='git '
Aliasy jsou super, teď už píši jen gs, gcm, gd atd. Mám je tak moc zažité, že když si sednu k počítači, kde aliasy nemám, chvilku mi trvá přeučit se zpět na psaní celých příkazů.
Při vývoji hodně používám větve a často se mi stávalo, že jsem commitoval do špatné, protože nebylo na první pohled vidět, ve které jsem a samozřejmě jsem se před commitem nedal gb (git branch). Při hledání tipů na aliasy jsem narazil na tento gist. Použil jsem z něj části pro zobrazení informací v promptu shellu.
git_status() {
untracked=$(git status | grep 'Untracked files' 2> /dev/null)
if [ -n "$untracked" ]; then
echo "☢"
fi
to_commit=$(git status | grep 'Changes not staged for commit' 2> /dev/null)
if [ -n "$to_commit" ]; then
echo "☠"
fi
is_ahead=$(git status | grep 'Your branch is ahead of' 2> /dev/null)
if [ -n "$is_ahead" ]; then
echo "⇧"
else
is_behind=$(git status | grep 'Your branch is behind' 2> /dev/null)
if [ -n "$is_behind" ]; then
echo "⇩"
fi
fi
}
parse_git_branch ()
{
branch=$(git branch 2> /dev/null | grep -e '\* ' | sed 's/^..\(.*\)/[\1]/')
if [ -n "$branch" ]; then
echo $branch$(git_status)
fi
}
PS1='\[\033[01;00m\][\[\033[01;32m\]\u\[\033[01;31m\]$(parse_git_branch)\[\033[01;30m\]@\[\033[01;33m\]\h\[\033[00m\]\[\033[01;00m\]]\[\033[01;00m\]-\[\033[01;00m\][\[\033[01;34m\]\w\[\033[01;00m\]]\[\033[00m\]\$ '
Na obrázku je vidět, že jsem ve větvi master a podle symbolu vedle větve na první pohled vidím, že mám v adresáři soubory, které ještě musím commitnout.
Po commitu vidím, že ještě musím dát push abych změny dostal do repozitáře.
Vytvořil jsem větev feature a rovnou se do ní přepnul.
Podobně vše funguje, když lokální větev je pozadu za remote. Silně návykové, úpravy .bashrc kopíruji na všechny stroje.
Kromě aliasů pro git mám pár dalších. Nejpoužívanějšími jsou:
alias dssh='ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'
alias ymp3='youtube-dl -x --audio-format=mp3 --restrict-filenames'
První používám pro připojení do dockeru, kde potřebuji vypnout kontrolu klíčů. Druhý alias stáhne video z youtube a převede zvukovou stopu do formátu mp3. Používám na poslech delších rozhovorů jako je Deep talks Petra Ludwiga a další.