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'
svn命令行便捷代码的更多相关文章
- SVN命令行更新代码
命令列表 svn help查看帮助信息 Available subcommands: add auth blame (praise, annotate, ann) cat changelist (cl ...
- Linux环境SVN命令行使用经验总结(转)
在windows机器上开发得差不多了之后,打包传送到开发机编译,在开发机上解决编译错误. [缺点] 浪费时间在打包解包,机器间传输代码. 在windows机器上开发之后,check in代码进分支,在 ...
- Mac SVN 命令行
Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.10 以下是一些常用命令 1.将文件checkout到本地目录 svn checkout path(p ...
- [MAC] Mac下的SVN命令行
转载自: http://www.cnblogs.com/snandy/p/4072857.html Mac自带了SVN命令行,如我的升级到10.10(OSX yosemite)后命令行版本为1.7.1 ...
- 转:svn命令行操作
原文:http://zhumeng8337797.blog.163.com/blog/static/10076891420115218821912/SVN命令行 -- ::| 分类: CVS |字号 ...
- Windows下SVN命令行工具使用详解
根据我的记忆,似乎Windows 7下自自带一个svn命令行工具.如果你的机器没有,不必担心.你可以从http://subversion.tigris.org获 取subversion for win ...
- svn命令行修改已提交的版本备注
svn命令行修改已提交的版本备注 参考文章: stackoverflow.com/questions/304383/how-do-i-edit-a-log-message-that-i-already ...
- 如何通过Git命令行把代码提交到github上
1.http://www.cnblogs.com/leesf456/p/5169765.html 参考博客 背景:最近入手了mac,看见mac上的大神都是在用git命令行推代码,我很羡慕有木有,好 ...
- svn命令行批量删除和批量添加
svn命令行批量删除和批量添加 如果使用svn的命令行,例如在linux下的终端中使用,svn的添加命令是svn add,删除命令是svn del,但是缺乏批量的操作,如果我在资源管理器中,手动添加了 ...
随机推荐
- 初码-Azure系列-记一次从阿里云到Azure的迁移和部署
有个客户在阿里云上,这次要迁移到Azure去,手工记一下流水账 原系统信息: 阿里云ECS单Web节点(8核16G,10000IOPS SSD云盘)+阿里云ECS单数据库节点(16核32G,15000 ...
- 使用cmd来起一个服务器
第一步:安装Node.js 下载地址:https://nodejs.org/en/ 第二步:打开cmd,输入node -v 确认是否安装成功,成功后显示版本号如下: 第三步:输入命令:ndoe ins ...
- Mac上面Mov转gif
尝试了很多方法,后来发现这个网站转换的结果最好, http://ezgif.com/video-to-gif/
- (中级篇 NettyNIO编解码开发)第六章-编解码技术
基于Java提供的对象输入/输出流ObjectlnputStream和ObjectOutputStream,可以直接把Java对象作为可存储的字节数组写入文件,也可以传输到网络上.对程序员来说,基于J ...
- 开涛spring3(6.4) - AOP 之 6.4 基于@AspectJ的AOP
Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明. 6.4.1 启用对@AspectJ的支持 Spring默认不支持@AspectJ风格的切面声明, ...
- Linux下批量管理工具PSSH
pssh命令 pssh命令是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认 ...
- RabbitMQ_安装配置与管理
RabbitMQ 安装配置与管理 安装 安装erlang虚拟机 Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机 #wget http://www.erlang.org/do ...
- 源码阅读—Iterator接口和LIstIterator接口
在继续看ArrayList源码之前,先了解Iterator接口和ListIterator接口,下篇文章详细讲解ArrayList是如何实现它们的. 我们知道,接口只是一种规范,当继承接口并实现其中的方 ...
- MySQL目录结构和简单指令
1.MySQL目录结构 了解每个软件的安装目录下,每个文件夹下文件的类型和功能是有必要的,这可以方便我们直接进行软件配置和某些参数的修改. 2.简单指令 进入cmd后可以直接操作的命令 1)启动MyS ...
- .NET MVC页面生命周期及传统ASP.NET页面周期
目前我主要使用.Net MVC框架进行网页创建,数据库是MSSQL Server.所以,我就用.NET MVC框架的web页面周期来说明页面的生命周期,但是我觉着其他MVC框架也是大同小异的. 本文主 ...