svn命令行便捷代码

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

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里面。比如 alias sourceup='source ~/.bash_profile'。这样以后更改了.bash_profile 的话只要打命令sourceup就可以更新.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,-以及文件名
        svnopm:显示只有属性发生变化的文件。可接受参数-r.
        svnc:显示所有冲突文件。可接受-m,-t.
        svnmm:merge主干
        svnmb:接受一个分支url参数,将分支merge回主干。
        mysvnhelp:显示此段话。

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

svnc -t

 注意的是,svn树冲突,属性冲突不支持用resolve -tc,resolve -mc的选项,只能直接编辑完后接受working状态

下图是我的~/.bash_profile文件。

export PATH=/opt/subversion/bin:$PATH
master="http://tc-svn.tencent.com/basic/basic_iphoneqq_rep/iphoneqq_proj/trunk/master"
function myhelp_fn(){

echo '
-v:简介。-m:接受我的冲突。-t:接受他的冲突
svnopc:显示只有属性冲突的文件。可接受参数-v,-m,-t.
svnopm:显示只有属性发生变化的文件。可接受参数-r.
svnc:显示所有冲突文件。可接受-m,-t.
svnmm:merge主干
svnmb:接受一个分支url参数,将分支merge回主干。
svnrmuv:删除除了xcworkspace,xcuserdata以外的unversion文件
'

}
alias mysvnhelp=myhelp_fn
alias svnstat="svn st | gawk '/@/{print \$0\"@\"} !/@/{print \$0}'"
alias svnstgetpath="awk '{print \"\47\"substr($0,9)\"\47\"}'"
function svnopc_fn(){
IFS=$'\n'
local pcFiles=`svn st | awk '/^[^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 | awk '{print $NF".prej"}' | xargs head -n 2
done
fi
if [ $# -eq 1 ] && [ $1 == '-m' ] ; then
echo '属性冲突暂时不支持该操作'
# printf '%s\n' "${pcFiles[@]}" | awk '{print $NF}' | xargs svn resolve --accept mf
fi
if [ $# -eq 1 ] && [ $1 == '-t' ] ; then
echo '属性冲突暂时不支持该操作'
# printf '%s\n' "${pcFiles[@]}" | awk '{print $NF}' | xargs svn resolve --accept tf
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 | awk '/^ M/{print $0}'
fi
if [ $# -eq 1 ] && [ $1 == '-r' ] ; then
svnstat | awk '/^ M/{print $0}'| svnstgetpath| 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 "\47"substr($0,9)"\47"}'
fi
if [ $# -eq 1 ] && [ $1 == '-t' ] ; then
svnstat | gawk --re-interval '!/^[^C]{7,7}/{print "\47"substr($0,9)"\47"}' | xargs svn resolve --accept tc
fi

}
alias cdm='cd "/Users/xiaobochen/Desktop/MainQQ/master" && pwd'
alias cdb='cd "/Users/xiaobochen/Desktop/BranchQQ/iPhoneQQ_6.3.1_VAS_Reader"&& pwd'
alias svnrmuv='svn st | awk '\''/^?/&&!/xcuserdata/&&!/xcworkspace/{print $NF}'\'' |xargs rm -rf'
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'

 

posted on 2016-03-20 11:44  天天波波  阅读(623)  评论(2编辑  收藏  举报

导航