在把分支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‘
时间: 2024-11-06 00:50:38