svn常用快捷命令集合。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了svn常用快捷命令集合。相关的知识,希望对你有一定的参考价值。

  在把分支merge回主干的时候,有时候需要只提交自己修改过的文件,但是很多文件其实分支上没动过,但却显示有变化,这个其实是属性发生了变化。svn通过svn:mergeinfo来记录merge的记录。所以有时候需要把只有属性变化的文件给revert掉。这个时候可以用下面的命令:

        -v:简介。-m:接受我的冲突。-t:接受他的冲突.-r:revert
        svnopc:显示只有属性冲突的文件。可接受参数-v,-m,-t.
        svnopm:显示只有属性发生变化的文件。可接受参数-r.
        svnc:显示所有冲突文件。可接受-m,-t.
        svnmm:merge主干
        svnmb:接受一个分支url参数,将分支merge回主干。
        mysvnhelp:显示此段话。

  注意的是,svn树冲突不支持用resolve -tc,resolve -mc的选项。需要

svn st | gawk /^ M/{print $0}| gawk {print $NF} | xargs svn revert

从svn help st可以看到第二栏目标的是属性变化,如果你没有更改过文件的属性,那么可以通过这个命令可以把只有属性变化的文件revert掉。

  但是如果文件名含有‘@‘的话,需要再文件名后添加个‘@‘。因此svn st 可以改成  

svn st | gawk /@/{print $0"@"} !/@/{print $0}

  有时候需要查看一下都有哪些冲突文件,可以通过以下命令

svn st | gawk  --re-interval !/^[^C]{7,7}/{ print $0}

svn st 第一栏的显示的是内容的状态,第二栏是属性状态,第七栏则是树冲突。

  如果查看只有属性冲突的文件可以用svn st | gawk ‘/^[^C]C/{print $0}‘

  可以用alias 把这些常用的命令写成一个快捷的命令,写在~/.bash_profile里面。

      我写了几个常用的快捷命令。支持以下几个功能。svnmm需要自己设定下主干的位置,其实是可以通过 svn log -v --stop-on-copy来截取出主干位置,但不如直接设定成一个固定命令。svnmm和svnmb都直接使用--accept p。svn属性冲突的内容会写在confictfilename.prej里面。这边用svnopc -v可以查看属性冲突文件的前两行。通常前两行就是概括冲突原因.

        -v:简介。-m:接受我的冲突。-t:接受他的冲突.-r:revert
        svnopc:显示只有属性冲突的文件。可接受参数-v,-m,-t.
        svnopm:显示只有属性发生变化的文件。可接受参数-r.
        svnc:显示所有冲突文件。可接受-m,-t.
        svnmm:merge主干
        svnmb:接受一个分支url参数,将分支merge回主干。
        mysvnhelp:显示此段话。

 截几个图显示一下。svnopc -v

技术分享

svnc -t

技术分享

 

export PATH=/opt/subversion/bin:$PATH
master="http:yoursvn"
function myhelp_fn(){

    echo         -v:简介。-m:接受我的冲突。-t:接受他的冲突.-r:revert
        svnopc:显示只有属性冲突的文件。可接受参数-v,-m,-t.以及具体的文件名,如果是具体的文件名就会把.prej文件一起打出来。
        svnopm:显示只有属性发生变化的文件。可接受参数-r.
        svnc:显示所有冲突文件。可接受-m,-t.
        svnmm:merge主干
        svnmb:接受一个分支url参数,将分支merge回主干。
        mysvnhelp:显示此段话。

    
}
alias mysvnhelp=myhelp_fn
alias svnstat="svn st | gawk ‘/@/{print \$0\"@\"} !/@/{print \$0}‘"
function svnopc_fn(){
    IFS=$\n
    local pcFiles=`svn st | gawk /^[^C]C/{print $0}`
    if [ $# -eq 0 ] ; then
        printf %s\n "${pcFiles[@]}"
    fi
    if [ $# -eq 1 ] && [ $1 == -v ] ; then
        for i in "${pcFiles[@]}"
        do
            printf %s \n $i | gawk {print $NF".prej"} | xargs head -n 2
        done
    fi
    if [ $# -eq 1 ] && [ $1 == -m ] ; then
        printf %s\n "${pcFiles[@]}" | gawk {print $NF} | xargs svn resolve --accept mc
    fi
    if [ $# -eq 1 ] && [ $1 == -t ] ; then
        printf %s\n "${pcFiles[@]}" | gawk {print $NF} | xargs svn resolve --accept tc
    fi
    
    if [ $# -eq 1 ] && [ -a $1 ] && [ -a "$1.prej" ]; then
        cat $1".prej"
    fi
    unset IFS
}
alias svnopc=svnopc_fn
function svnopm_fn(){
    if [ $# -eq 0 ] ; then
        svn st | gawk /^ M/{print $0}
    fi
    if [ $# -eq 1 ] && [ $1 == -r ] ; then
        svn stat | gawk /^ M/{print $0}| gawk {print $NF} | xargs svn revert
    fi

}

alias svnopm=svnopm_fn
function svnc_fn(){
    if [ $# -eq 0 ] ; then
        svn st | gawk  --re-interval !/^[^C]{7,7}/{ print $0}
    fi

    if [ $# -eq 1 ] && [ $1 == -m ] ; then
        svnstat | gawk --re-interval !/^[^C]{7,7}/{print $NF} |  xargs svn resolve --accept mc
    fi
    if [ $# -eq 1 ] && [ $1 == -t ] ; then
        svnstat | gawk --re-interval !/^[^C]{7,7}/{print $NF} |  xargs svn resolve --accept tc
    fi

}
alias svnc=svnc_fn
alias svnmm=echo $master | xargs bash -c "echo \$0 &&svn merge \$0 --accept p " 
alias svnmb=svn merge --accept p --reintegrate
alias sourceup=source ~/.bash_profile

 

以上是关于svn常用快捷命令集合。的主要内容,如果未能解决你的问题,请参考以下文章

Sublime text3最全快捷键清单

常用HTML5代码片段

Sublime text3最全快捷键清单

svn 常用命令

代码仓库:svn和git常用命令合集

VScode 好用插件集合