笔记:svn操作优化,在bash中通过别名实现svn代码仓库的在线操作

一、TortoiseSVN

使用过SVN的应该都知道TortoiseSVN,界面操作简单方便,易上手。

二、SVN命令行

如果想在命令行中操作代码仓库,必须把代码下下来,才能在目录间切换,如果代码仓库中的代码量很大,全部下下来非常不现实,既占用磁盘空间又耗时。

三、自定义别名

通过对svn的常见操作做别名处理,通过别名来实现命令行中对svn代码仓库目录的切换。对于喜欢用命令行来操作的人来说是一个不错的方法,别名示例如下:

#将GBK转为UTF8
alias utf8_iconv='iconv -f GBK -t UTF-8'

#svn操作相关
svn_path="https://127.0.0.1/test/"
alias svn_pwd='echo $svn_path'
alias svn_ls='svn list "$svn_path" | utf8_iconv'
alias svn_info='svn info "$svn_path"'
alias svn_..='svn_path=$(dirname "$svn_path") && svn_pwd'

function svn_log(){
    svn log "$*" "$svn_path" | utf8_iconv
}

function svn_cd(){
    if [[ ${svn_path: -1} == "/" ]]; then
        svn_path="${svn_path}$1"
    else
        svn_path="$svn_path/$1"
    fi
    svn_pwd
}

function _svn_cd()
{
    local i
    local toDir="$2"
    local absDir=$svn_path/$toDir
    local toDirPre
    local toDirBase

    absDir=${absDir//\/\//\/}
    absDir=${absDir//:\//:\/\/}

    if [[ ${absDir: -1} != "/" ]]; then
        absDir=$(dirname $absDir)
    fi

    if [[ ${toDir: -1} == "/" ]]; then
        toDirPre=$toDir
        COMPREPLY=($(svn list "$absDir" | awk '{printf $0" "}'))
    else
        toDirPre=$(dirname "$toDir")
        toDirBase=$(basename "$toDir")
        COMPREPLY=($(svn list "$absDir" | grep -E "^$toDirBase" | awk '{printf $0" "}'))
    fi

    if [[ $toDirPre != "." ]]; then
        for((i=0; i < ${#COMPREPLY[@]}; i++));
        do
            if [[ ${toDirPre: -1} == "/" ]]; then
                COMPREPLY[$i]=$toDirPre${COMPREPLY[$i]}
            else
                COMPREPLY[$i]=$toDirPre/${COMPREPLY[$i]}
            fi
        done
    fi

    return 0
}

# 为 svn_cd 增加 tab 键自动提示
complete -o nospace -o filenames -F _svn_cd svn_cd

上一篇:机器学习:没有免费午餐定理(No Free Lunch Theorem)


下一篇:Docker tab自动补全