SVN的正确提交方式
下面就我们在外事项目中使用SVN的经验简单做个说明。
如何正确提交代码?
可能很多人用过微软的VISUAL SOURCESAFE 或者 Team Foundation Server,就认为那还不简单,checkout/checkin 不就完了吗。孰不知
由于SVN采用了另一种源代码管理机制(merge模式),而微软采用的是传统的(lock/unlock)机制,由于机制不同,提交方式也不同。LOCK模
式更适合小团队工作,谁修改,谁加锁,提交后解锁。MERGE模式却是谁都可以修改,而后提交时通过比较和合并解决分歧。所以,大家要按
如下方式更新才能正确提交。
常见情况是:假定项目名称是FAMS。
(一) 用户张三CHECKOUT 了 FAMS的 revision 101,然后开始工作。
(二)用户李四CHECKOUT 了 FAMS的 revision 101,然后开始工作。
(三) 现在李四完成了工作,进行提交,SVN 版本号变为revision 102,一切OK.
(四) 现在张三完成了工作,也要进行提交,由于其工作的基础版本(workingbase)是revision 101,这时SVN会提示版本已过期,需要先
更新(svn-update).但这时真正的问题就来了:
注意SVN的机制是提交时合并,如果它发现服务器上文件版本比本地文件版本新,它会自动把服务器上的文件更新到本地,如果这个文件
李四从未改过,一切OK,更新就可以了。
但是,如果李四也对此文件比如名字叫 fillform.java做了修改, 这又分三种情况:
第一种情况:李四新增方法或内容,张三也是新增的内容,各不冲突,一切OK,SVN会自动合并。
第二种情况:李四删除了部分代码,但服务器上此文件(张三提交的)此部分代码未动,而版本却比本地新,则SVN会自动把服务器上
此文件内容合并到本地李四的版本中,注意啊:它把李四正确的删除工作给反复了,这就是SVN这种增量合并机制导致的最大问题。
正确方法是: 首先拷贝此文件到另一个临时目录,比如D:\TEMP,然后SVN-UPDATE此文件,第三步拷贝此文件回来,由于此时工作基础
版本已更新至revision101,则可以正常对比,修改。最后提交即可。
第三种情况:如果SVN-UPDATE时发生了冲突(conflict),会产生三个文件:
一个是.mine 本地版本,
一个是.r101,你的工作基准版本,
一个是.r102,服务器端的最新版本。
则手工修改冲突,然后先SVN-resolved, 注意这是告诉SVN你已经解决了冲突。然后执行下一步SVN-COMMIT即提交,就可以把新代码更
新上去了。
怎么样?说的还够清楚吧?
这时,有读者会问,一个文件这样可以,那整个项目怎么办呢?特别是我怎么知道哪些文件改了呢?别急,这个办法是有滴。
一种方法是利用SVN-check FOR modification .
另一种方法是利用 SVN-show log。 在弹出的项目版本列表上选择最新的版本(注意你的工作基础版本会用黑体列示出来)然后在右键
菜单上选择 comparing working copy 就可以找到服务器上最新版本与你本地工作版本的所有不一致的文件了。然后对这些文件逐一处理,
提交即可。
最后,一点提醒:注意你的代码全部提交后,一般是用SVN-CHECKOUT 重新下载一个新版本进行工作,这样能确保代码最新,而不是在
原WORKING COPY上继续工作。
SVN的正确提交方式的更多相关文章
- git代码提交方式
https://my.oschina.net/tearlight/blog/193921 <a>github的提交方式 (1)git add .----------------- ...
- 以正确的方式开源 Python 项目
以正确的方式开源 Python 项目 大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清 晰和无痛.我不是 ...
- 以正确的方式开源 Python 项目(转)
大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指——“创建一个GitHub库,提 ...
- java基础77 Http协议及Servlet中的GET、POST提交方式
本文知识点(目录): 1.什么是http协议 2.查看http协议的工具 3.http协议的内容 4.请求方式 5.请求头和响应头(以及获取请求头信息的方法) 6.实体内 ...
- jquery提供的数据提交方式2-ajax
以前介绍过ajax提交方式.但仅仅是个例子,今天将详细介绍jquery中的$.ajax,$.get,$.post方法. 一,首先介绍$.ajax方法参数(以下参数来自:http://www.cnblo ...
- 使用SVN钩子强制提交日志和限制提交文件类型
Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...
- Pull Request的正确打开方式(如何在GitHub上贡献开源项目)
Pull Request的正确打开方式(如何在GitHub上贡献开源项目) GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/f ...
- 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗
开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...
- 华为手机浏览器不支持PUT提交方式的解决方案
最近所在技术团队在开发webapp项目,前端angularjs+后端.Net MVC API,API登录接口定义为PUT提交方式,在做兼容测试时发现UC.safari.微信浏览器下都可以登录,但在华为 ...
随机推荐
- Mac 10.12安装远程桌面工具TeamViewer
说明:个人使用时免费的,虽然启动时有弹框,但是不影响使用. 下载: https://www.teamviewer.com/zhCN/
- suse-Linux下安装Oracle11g服务器
系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1G的物理内存 交换空间 一般为内存的2倍,例如:1G的内存可以设置swap 分区为3G大小 硬盘 5G以上 2.修改操作系 ...
- dip,px,sp区别及使用场景
1.区别 dip(device independent pixels)——设备独立像素:这个和设备硬件有关,一般哦我们为了支持WCGA.HVGA和QVGA推荐使用这个,不依赖于像素.等同于dp. px ...
- c++ 网络编程课设入门超详细教程 ---目录
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9663167.html c++ 网络编程(一)TCP/UDP windows/linux 下入门 ...
- JavaScript设计模式-19.代理模式
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- MySQL之mysql命令使用详解
MySQL Name mysql - the MySQL command-line tool Synopsis mysql [options] db_name Description mysql is ...
- WPF中用后台C#代码为TabItem设置Background属性
TabItem tabItem = sender as TabItem; tabItem.Background = new ImageBrush(new BitmapImage(new Uri(@&q ...
- iOS 真机测试错误“The application could not be verified”
iOS 真机测试错误"The application could not be verified" 真机测试的时候报错:"The application could no ...
- Visual Studio、.net framework、CLR与JDK、JRE、JVM、Eclipse
.net平台 java平台 开发工具 Visual Studio ...
- 控件--spinner(列表选项框)
1. 关键点 1). Spinner的菜单显示方式 它有两种显示形式,一种是下拉菜单,一种是弹出框,菜单显示形式是spinnerMode属性决定的: android:spinnerMode=" ...