7May/180
colorful bash prompt with git branch
Edit .bashrc :
export COLOR_NC='\e[0m' # No Color
export COLOR_WHITE='\e[1;37m'
export COLOR_BLACK='\e[0;30m'
export COLOR_BLUE='\e[0;34m'
export COLOR_LIGHT_BLUE='\e[1;34m'
export COLOR_GREEN='\e[0;32m'
export COLOR_LIGHT_GREEN='\e[1;32m'
export COLOR_CYAN='\e[0;36m'
export COLOR_LIGHT_CYAN='\e[1;36m'
export COLOR_RED='\e[0;31m'
export COLOR_LIGHT_RED='\e[1;31m'
export COLOR_PURPLE='\e[0;35m'
export COLOR_LIGHT_PURPLE='\e[1;35m'
export COLOR_BROWN='\e[0;33m'
export COLOR_YELLOW='\e[1;33m'
export COLOR_GRAY='\e[0;30m'
export COLOR_LIGHT_GRAY='\e[0;37m'
function parse_git_dirty {
[[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working directory clean" ]] && echo "*"
}
function parse_git_branch {
git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}
PS1=""
PS1=$PS1"\[$COLOR_GREEN\]\u@\h\:" # Display user@host
#PS1=$PS1"\[$Yellow\]\@:" # Display time
#PS1=$PS1"\[$Blue\][\[$Cyan\]\d\[$Blue\]] " # Display date
#PS1=$PS1"\[$Yellow\]\@:" # Display time
PS1=$PS1"\[$COLOR_CYAN\]\w" # Display pwd
PS1=$PS1"\[$COLOR_BROWN\]"'$(parse_git_branch)' # Display git-branch
PS1=$PS1"\[$COLOR_NC\]$ " # Turn off color and end prompt
export PS1=$PS1
8Mar/180
git checkout pull requests
Edit .git/config :
[remote "origin"]
url = ...
# fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/pull/*/head:refs/remotes/origin/pull/*
10Apr/140
Export/apply git diff as patch
git diff > save.patch patch -p1 < save.patch
Link: Stackoverflow
25Oct/130
git auto-completion
wget https://raw.github.com/git/git/master/contrib/completion/git-completion.bash -O ~/.git-completion.bash source ~/.git-completion.bash
18Oct/130
pushing to a non-bare git repo
Init a directory as a bare repo in the first place:
git init . # non-bare git init -bare . # bare
To be able to push into a non-bare repo, just check out a branch users don't push to:
git checkout -b DUMMY_BRANCH_DONT_USE
Or turn it into a bare repo:
rm * mv .git/* . rm .git sed -i 's/bare = false/bare = true/' config
Source: gitolite
26Sep/130
git ignoring changes
Ignoring files in repository:
edit .gitignore git update-index --[no-]assume-unchanged FILE # if rule was added after the tracked file
Ignoring files in all repositories on your computer:
edit ~/.gitignore_global git config --global core.excludesfile ~/.gitignore_global
Ignoring local per-repository files:
edit .git/info/exclude
Source: github help
18Jul/110
git tag
Tag commit:
git tag <tagname> -m <msg> #lightweight git tag -a <tagname> -m <msg> #annotated, preferred
Push tags (not done by default):
git push --tags <remote> <branch> #dangerous, avoid pushing all tags! git push <remote> <tagname>
Fetch tags
git fetch --tags <remote> <branch> #or git remote update <remote>
Look up which branch has the tag
git branch --all --contains <tagname>
delete tags remote and local:
git push --delete origin <tagname> git tag -d <tagname>