git-win-symlink-aliases 1.4 KB
#Based on http://stackoverflow.com/questions/5917249/git-symlinks-in-windows
git config alias.rm-symlink '!__git_rm_symlink(){
    git checkout -- "$1"
    link=$(echo "$1")
    POS=$'\''/'\''
    DOS=$'\''\\\\'\''
    doslink=${link//$POS/$DOS}
    dest=$(dirname "$link")/$(cat "$link")
    dosdest=${dest//$POS/$DOS}
    if [ -f "$dest" ]; then
        rm -f "$link"
        cmd //C mklink //H "$doslink" "$dosdest"
    elif [ -d "$dest" ]; then
        rm -f "$link"
        cmd //C mklink //J "$doslink" "$dosdest"
    else
        echo "ERROR: Something went wrong when processing $1 . . ."
        echo "       $dest may not actually exist as a valid target."
    fi
}; __git_rm_symlink "$1"'

git config alias.rm-symlinks '!__git_rm_symlinks(){
    for symlink in $(git ls-files -s | egrep "^120000" | cut -f2); do
        git rm-symlink "$symlink"
        git update-index --assume-unchanged "$symlink"
    done
}; __git_rm_symlinks'

git config alias.checkout-symlinks '!__git_checkout_symlinks(){
    POS=$'\''/'\''
    DOS=$'\''\\\\'\''
    for symlink in $(git ls-files -s | egrep "^120000" | cut -f2); do
        git update-index --no-assume-unchanged "$symlink"
        dossymlink=${symlink//$POS/$DOS}
        cmd //C rmdir //Q "$dossymlink" 2>/dev/null
        git  checkout -- "$symlink"
        echo "Restored git symlink $symlink <<===>> $(cat $symlink)"
    done
}; __git_checkout_symlinks'