码迷,mamicode.com
首页 > 其他好文 > 详细

svn常用快捷命令集合。

时间:2016-03-20 13:12:04      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

  在把分支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常用快捷命令集合。

标签:

原文地址:http://www.cnblogs.com/tiantianbobo/p/5297394.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!