使用过SVN的应该都知道TortoiseSVN,界面操作简单方便,易上手。
如果想在命令行中操作代码仓库,必须把代码下下来,才能在目录间切换,如果代码仓库中的代码量很大,全部下下来非常不现实,既占用磁盘空间又耗时。
通过对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