在把分支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. 做自己的PHP语法解释器

    PHP关键字异构化实验 PHP词法分析和语法分析 简单理解PHP代码执行过程:http://blog.csdn.net/risingsun001/article/details/22888861 PH ...

  2. iOS 制作自动打包脚本 Xcode8.3.2

    本文包含以下内容: 前言 1.shell脚本的编写 2.xcodebuild命令 3.完整的可用示例 参考资料 前言 做iOS开发,打包APP是比较频繁的事情,每次都手动去配置一堆东西确实是比较乏味. ...

  3. github上传文件

    说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...

  4. redis的安装部署启动停止<17.3.21已更新>

    --------------------------------------------------------- 启动redis时使用下面两条命令: redis-server /etc/redis. ...

  5. Guvav:Options使用和避免NULL

    JAVA中的null null是Java中一个很重要的概念.null设计初衷是为了表示一些不确定的东西.null是Java中的关键字,它是大小写敏感的,你不能将null写成Null或NULL,编译器将 ...

  6. 通过js给网页加上水印背景

    有些后端管理系统,因为业务逻辑的需要,需要加上水印,下面就是水印方法. function watermark(settings) { debugger; //默认设置 var defaultSetti ...

  7. java虚拟机内存分配

  8. CI框架浅析(全篇)

        业余花了点时间看看CodeIgniter框架(简称CI),CI目前的稳定版本是 3.X,4.0版本已经出来了,但还在测试中,所以我分析的还是 3.x 版本. CI是一个很轻便的框架,整个下载包 ...

  9. java zip4j 内存文件和磁盘文件 压缩和加密

    经常服务器需要对文件进行压缩,网络上流传较多的是从磁盘文件中来压缩成zip文件.但是常常服务器的文件存放在内存中,以byte[]形式存储在内存中.这个时候就不能使用网络上流传的常用方法了,这里就需要对 ...

  10. 解决R语言临时文件目录的问题(tempdir、tempfile)

    最近在调用SparkR的时候,当用copy_to函数将R中的数据框导入到Spark时,会在默认的tempdir()目录下(这里默认目录即为/tmp)产生巨大的临时文件, 严重影响R脚本的运行,最终一番 ...