Prompt i terminalen som visar git- och svn-status
tisdag, januari 29th, 2013Här kommer ett tips om du arbetar med Git eller SVN ifrån terminalen. Det går att modifiera prompten så att den visar statusen för aktuell arbetskopia.
Normalt ser prompten ut ungefär så här, beroende på distribution (jag kör Linux Mint för tillfället).

När jag hoppar in i en katalog som är utcheckad från SVN ser det ut så här.

Nu syns information om aktuell branch och revision, i detta fall är branchen branches/RB-1.8 och revisionen 837. Att det visas i grönt betyder att det inte finns några modifieringar. Om jag ändrar i en fil kommer prompten att bli röd.

Arbetar du med Git syns liknande information i prompten. På bilden nedan syns hur jag går in i en katalog som är klonad från Git, skapar en ny branch med git flow och redigerar en fil. Prompten byter även här färg till rött när det finns modifierade filer och när jag committar mina ändringar ändrar färgen till grön igen. Jag slutför min feature (branch) och promten ändras igen så att aktuell branch (develop) visas.

För att få den här funktionaliteten läggar man till kodsnutten nedan i filen .bashrc som finns i din hemkatalog, finns den inte går det bra att skapa den. För att scriptet ska fungera måste filen /etc/bash_completion.d/git finnas, den kommer vanligen med i installationen av git, åtminstone om du installerar med apt-get install git.
Här kommer då koden.
# Custom PS1 prompt to show git and svn repos, branches and their status
Color_Off="\[\033[0m\]" # Text Reset
Green="\[\033[0;32m\]" # Green
BGreen="\[\033[1;32m\]" # Green
BYellow="\[\033[1;33m\]" # Yellow
IRed="\[\033[0;91m\]" # Red
PathShort="\w"
export SVN_SHOWDIRTYSTATE=1
export PS1='$(git branch &>/dev/null;\
if [ $? -eq 0 ]; then \
# In Git repo
echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \
if [ "$?" -eq "0" ]; then \
# Clean repository - nothing to commit
echo "'$Green'"$(__git_ps1 " (%s)"); \
else \
# Changes to working tree
echo "'$IRed'"$(__git_ps1 " {%s}"); \
fi) '$BYellow$PathShort$Color_Off'\$ "; \
elif [[ -d ".svn" ]] ; then \
# In SVN repo
r=`__svn_rev` ;\
b=`__svn_branch` ;\
out=`svn status | grep -c ".*"` ; \
if [ $out -eq 0 ] ; then \
echo "'$Green'[$b:$r] '$BYellow$PathShort$Color_Off'\$ "; \
else \
echo "'$IRed'[$b:$r] '$BYellow$PathShort$Color_Off'\$ "; \
fi;
else \
@2 - Prompt when not in GIT repo
echo " '$BGreen'\u@\h '$BYellow$PathShort$Color_Off'\$ "; \
fi)'
# Outputs the current trunk, branch, or tag
__svn_branch() {
local url=
if [[ -d .svn ]]; then
url=`svn info | awk '/URL:/ {print $2}'`
root=`svn info|awk '/Repository Root/ {print $3}'`
if [[ $url =~ trunk ]]; then
echo trunk
elif [[ $url =~ /branches/ ]]; then
echo ${url##$root/}
elif [[ $url =~ /tags/ ]]; then
echo ${url##$root/}
fi
fi
}
# Outputs the current revision
__svn_rev() {
local r=$(svn info | awk '/Revision:/ {print $2}')
if [ ! -z $SVN_SHOWDIRTYSTATE ]; then
local svnst flag
svnst=$(svn status | grep '^\s*[?ACDMR?!]')
[ -z "$svnst" ] && flag=*
r=$r$flag
fi
echo $r
}
Rock on!

Ofta när jag ska hjälpa någon av våra utvecklare med ett problem är min första fråga: Vad står det i loggen? Apache och php har väl utvecklade loggfunktioner och man kan med hjälp av dom få en ganska bra fingervisning om vad som orsakar problemet. Exempelvis kan det stå:
Kommandot wget, som bland annat kan användas för hämta filer och sidor via http och ftp, finns tyvärr inte i Osx Lion. Det här är något som irriterat mig ett tag, men som jag av olika anledningar inte tagit tag i än. Så idag när jag satt och skrev lite nya alias för diverse kommandon (jag gör så för exempelvis de ssh-anslutningar jag ofta använder, det går fortare att bara skriva goserver1 istället för att skriva ssh -p 2211 daniel@server1.domain.com), så kom jag på att curl faktiskt finns i Lion. Varför helt enkelt inte göra ett alias för wget till curl? Så här gör man.

Utvecklar du sajter och lägger varje gång till en ny Virtual Host i Apaches konfigurationsfil så har jag ett tips, VirtualDocumentRoot! Om du har en utvecklingsdomän som heter domain.com skapar du ett wildcard i DNS’en ( *.domain.com ) som pekar mot din utevecklingsmaskin. I Apache’s konfiguration gör du sedan så här: