在把分支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'

svn命令行便捷代码的更多相关文章

  1. SVN命令行更新代码

    命令列表 svn help查看帮助信息 Available subcommands: add auth blame (praise, annotate, ann) cat changelist (cl ...

  2. Linux环境SVN命令行使用经验总结(转)

    在windows机器上开发得差不多了之后,打包传送到开发机编译,在开发机上解决编译错误. [缺点] 浪费时间在打包解包,机器间传输代码. 在windows机器上开发之后,check in代码进分支,在 ...

  3. Mac SVN 命令行

    Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.10 以下是一些常用命令 1.将文件checkout到本地目录 svn checkout path(p ...

  4. [MAC] Mac下的SVN命令行

    转载自: http://www.cnblogs.com/snandy/p/4072857.html Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.1 ...

  5. 转:svn命令行操作

    原文:http://zhumeng8337797.blog.163.com/blog/static/10076891420115218821912/SVN命令行 -- ::| 分类: CVS |字号 ...

  6. Windows下SVN命令行工具使用详解

    根据我的记忆,似乎Windows 7下自自带一个svn命令行工具.如果你的机器没有,不必担心.你可以从http://subversion.tigris.org获 取subversion for win ...

  7. svn命令行修改已提交的版本备注

    svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...

  8. 如何通过Git命令行把代码提交到github上

    1.http://www.cnblogs.com/leesf456/p/5169765.html   参考博客 背景:最近入手了mac,看见mac上的大神都是在用git命令行推代码,我很羡慕有木有,好 ...

  9. svn命令行批量删除和批量添加

    svn命令行批量删除和批量添加 如果使用svn的命令行,例如在linux下的终端中使用,svn的添加命令是svn add,删除命令是svn del,但是缺乏批量的操作,如果我在资源管理器中,手动添加了 ...

随机推荐

  1. 最大流算法之ISAP

    序: 在之前的博文中,我解释了关于最大流的EK与Dinic算法,以及它们的STL/非STL的实现(其实没什么区别).本次讲解的是ISAP算法.'I',指 inproved,也就是说ISAP其实是SAP ...

  2. 【Android Widget】FragmentTabHost

    android.support.v4包里面提供了FragmentTabHost用来替代TabHost,FragmentTabHost内容页面支持Fragment,下面我们就通过示例来看他的用法 效果图 ...

  3. 解决xmapp中Apache端口号占用问题

    [原]解决 "安装xmapp后Apache不能正常启动" 问题 小伙伴们安装xmapp后发现Apache不能正常开启,下面给出了不同情况的解决办法,可以分为以下几种情况分析问题: ...

  4. Python基本语法--语句

    # -*- coding: utf-8 -*- #条件语句 ''' if 判断条件: 执行语句…… else: 执行语句…… ''' flag = False name = 'python' if n ...

  5. JavaScript常用的方法和函数(setInterval和setTimeout)

    1.setInterval:计时器 可以按照指定的周期(以毫秒为单位)来调用函数或计算表达式 调用格式:setinterval(fun,time) 说明:fun为函数体,time为数值,这两个参数是必 ...

  6. Linux安装jdk7开发环境

    1.官网 下载jdk7版本 地址: http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-jav ...

  7. DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  8. nginx+gridfs+mongodb 配置访问png图片显示无法加载问题

    上传文件后,浏览器中请求:http://<nginx server ip>:<port>/gfs/<my file> 浏览器出现"无法打开页面" ...

  9. 同步文件的利器-rsync

    即使你只是个人用户而不是一个企业,备份你自己的数据也是非常重要的,我不想失去任何这些数据. rsync是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件 ...

  10. OpenCV探索之路(十一):轮廓查找和多边形包围轮廓

    Canny一类的边缘检测算法可以根据像素之间的差异,检测出轮廓边界的像素,但它没有将轮廓作为一个整体.所以要将轮廓提起出来,就必须将这些边缘像素组装成轮廓. OpenCV中有一个很强大的函数,它可以从 ...