在把分支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. Oracle的正则函数之regexp_like

    前言:最近接到一个让人肝疼的需求,用到了正则表达式去匹配字符串,顺便巩固一下oracle几个正则表达式的用法 例子: 找出为带小数点后两位的数字,不论正负.比如3.12,-4.56这样的.而3.145 ...

  2. Java内存使用量测试

    JVM内存使用量测试测试各种不同的数据结构在JVM中的内存使用量 import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import java.lang. ...

  3. Java生产1-100的随机数

    直接调用Math里面的random即可,简单方便int i = (int)(Math.random()*100+1);

  4. 自学JS

    通过慕课网自学JS,敲了好多代码,好像没什么卵用,附上代码,再接再厉吧! //属性getter setter方法var man = {name : 'wsy', weibo : '@wsy', get ...

  5. ZooKeeper安装、部署

    一.简介       ZK的安装和配置十分简单,既可以配置成单机模式,也可以配置成集群模式,zk使用java编写的运行在java环境上,3个ZK服务进程是建议的最小进程数量,而且建议部署在不通的物理机 ...

  6. servlet的过滤器的doFilter()

    doFilter中的chain.doFilter(res,req);//Filter 只是链式处理,请求依然转发到目的地址 意思就说过滤器只是一个关口,如果符合条件的请求会被过滤器拦截下来,然后进行处 ...

  7. 5、Java Swing布局管理器(FlowLayout、BorderLayout、CardLayout、BoxLayout、GirdBagLayout 和 GirdLayout)

    5.Java-Swing常用布局管理器       应用布局管理器都属于相对布局,各组件位置可随界面大小而相应改变,不变的只是其相对位置,布局管理器比较难以控制,一般只在界面大小需要改是才用,但即使这 ...

  8. Android onclick监听事件打开新界面

    一.新建工程 二.新建XML代码 新建一个Button <Button android:layout_width="wrap_content" android:layout_ ...

  9. javaWeb学习总结(7)- 使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  10. 我和 flow.ci 的第一次亲密接触

    编者按:本文转载自 flow.ci 用户 @君赏 的实践分享,原文链接这里. 这不是第一次听说 flow.ci ,记得当时 fir.im 新出这个服务的时候,我也是心情十分激动的去尝试,结果是只支持安 ...