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.
![](https://petrhlozek.cz/wp-content/uploads/2019/02/git_master_changes_not_commited-1.png)
Po commitu vidím, že ještě musím dát push abych změny dostal do repozitáře.
![](https://petrhlozek.cz/wp-content/uploads/2019/02/git_master_commited.png)
Vytvořil jsem větev feature a rovnou se do ní přepnul.
![](https://petrhlozek.cz/wp-content/uploads/2019/02/git_feature.png)
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ší.