文档章节

SVN的代码正确提交方法

木子丰
 木子丰
发布于 2013/10/14 11:16
字数 1045
阅读 1653
收藏 8
点赞 0
评论 1
想必大家现在都比较喜欢使用svn(subversion)完成代码管理了,因为它的开源,轻巧,易用。但是这样一个宝贝如果不知道其正确的用法,


也会让我们百思不得其解,甚至耽误项目进度,浪费程序员的心血和结晶。
   下面就我们在外事项目中使用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上继续工作。


     GOOD LUCK!

本文转载自:http://blog.sina.com.cn/s/blog_5920510a010128ax.html

木子丰
粉丝 17
博文 236
码字总数 68754
作品 0
郑州
程序员
加载中

评论(1)

i
ikillmeba
对象描述,有问题,张三,李四有问题
【git学习】SVN项目迁移到Git操作指南

2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情。 git学习——>在CenterOS系统...

qq446282412 ⋅ 05/19 ⋅ 0

GIT科普系列1:git如何放弃本地working directory的修改,以及回滚

背景: 版本管理对开发人员来说至关重要,之前一直使用svn(主要是TortoiseSVN)作为团队配合的协作工具。但是自己相关的开源项目使用的是git发布在github上。由于项目自身的局限性,很少有大...

zssureqh ⋅ 2016/06/19 ⋅ 0

Maven自动部署(SCM-SVN/Git)(maven-scm-plugin/maven-release-plugin插件的使用)

以下内容引用自https://ayayui.gitbooks.io/tutorialspoint-maven/content/book/mavendeployment_automation.html: 注意:Maven自动构建和自动部署的区别在于,构建只是编译代码阶段,而部署...

easonjim ⋅ 2017/05/15 ⋅ 0

SVN跨服务器配置post-commit提交后自动更新(SVN与WEB服务器不在同一台机器)

背景情况:SVN与WEB不在同一台服务器上,需要SVN提交后WEB站点自动进行SVN UPDATE更新,查阅网上的教程,发现部分的细节和权限部分没有提到导致跨服务器ssh执行更新脚本失败,手动执行post-...

PartyAnimals ⋅ 06/21 ⋅ 0

super_empire/patch-generator-parent

patch-generator-parent 通用svn、git增量部署补丁生成器,可用于svn/git/getee管理的maven项目的增量部署文件生成,支持多模块父子项目. 该模块可以对git/svn管理的项目进行增量代码生成用于...

super_empire ⋅ 04/20 ⋅ 0

Windows命令行启动SVN服务

Windows下命令行工具: URL:http://www.visualsvn.com/downloads/ 下载Apache Subversion command line tools,这是一个可以在cmd下使用的命令行工具解压后把里面bin目录这个路径添加到环境...

逆天96 ⋅ 06/20 ⋅ 0

Eclipse如何切换SVN用户

在eclipse中经常用到用svn进行代码版本控制,为了提交或更新代码的时候不反复地提示我们输入用户名和密码,于是我们 就习惯把访问SVN的用户名密码自动保存起来。以便下次自动使用,不要再次手...

时刻在奔跑 ⋅ 05/04 ⋅ 0

解决jenkins打包时不能及时更新到最新代码的问题

首先要定位是否真的拉不到最新代码? 定位步骤如下: 1、在SVN上,查看show log,没有记录 2、登录Jenkins,查看构建的输出记录,Console Output, ctrl+f,若找不到最新代码,则可以确定是拉...

金龙鱼管家 ⋅ 04/28 ⋅ 0

Svn结合hook实现自动发布及多Project管理更新

项目目的 出于管理需要,也需要在公司内部实现自动发布流程。当开发机提交SVN代码之后,自动同步到测试服务器进行测试。 工作原理 hook简单介绍 配置svnserve 创建多项目代码仓库 配置集中认...

ljpwinxp ⋅ 04/19 ⋅ 0

通用 svn、git 增量部署补丁生成器 - patch-generator-parent

通用 svn、git 增量部署补丁生成器,可用于 svn/git/getee 管理的 maven 项目的增量部署文件生成,支持多模块父子项目。 总共包含四种生成方案: git 服务器分支提交分析; git 提交日志分析...

em_Aaron ⋅ 04/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JEPLUS主从功能配置之主从布局的设置——JEPLUS软件快速开发平台

JEPLUS主从功能配置之主从布局的设置 主从功能配置成功之后就需要根据业务需求来调整主从功能的数据显示方式,不同的主从数据的显示可以达到不同的主从数据显示效果,今天这篇笔记就讲解一下...

JEPLUS ⋅ 1分钟前 ⋅ 0

如何利用极光推送的新功能玩转世界杯营销

四年一次的世界杯已经于6月14日开赛!对于app的运营人员而言,这场远在俄罗斯的绿茵征战绝不仅仅牵动着球迷们的心,更拨动着众多互联网企业运营人员的神经。在这场营销大战中,push显然是app...

极光推送 ⋅ 5分钟前 ⋅ 0

Spring Cloud构建微服务架构-Hystrix依赖隔离

依赖隔离 “舱壁模式”对于熟悉Docker的读者一定不陌生,Docker通过“舱壁模式”实现进程的隔离,使得容器与容器之间不会互相影响。而Hystrix则使用该模式实现线程池的隔离,它会为每一个Hys...

itcloud ⋅ 7分钟前 ⋅ 0

SpringCloud 微服务 (八) 统一配置中心 Config Server&Client

壹 Spring Cloud Config 统一配置中心,方便维护配置文件,对一些公司对数据库密码等敏感的信息,对普通开发人员不公开,放在运维人员手上,对配置作一个隔离作用,另外项目线上的配置改动都要重新...

___大侠 ⋅ 10分钟前 ⋅ 0

echarts轮播地图并结合鼠标浮动点击

直接上代码 timeId=setInterval(function () { if(count<11){ myChart.dispatchAction({ type: 'downplay', ......

莫西摩西 ⋅ 13分钟前 ⋅ 0

基于 HTML5 的工业互联网 3D 可视化应用

工业企业中生产线处于高速运转,由工业设备所产生、采集和处理的数据量远大于企业中计算机和人工产生的数据,生产线的高速运转则对数据的实时性要求也更高。破解这些大数据就是企业在新一轮制...

xhload3d ⋅ 16分钟前 ⋅ 0

Nging启动与停止bat

start_nginx.bat @echo off  f:  cd F:\server\nginx-1.13.6  echo "nginx is starting on port 80"  start "" "nginx.exe"  exit   stop_nginx.bat @echo off::windows ......

Jay丶 ⋅ 17分钟前 ⋅ 0

SuRF: 一个优化的 Fast Succinct Tries

作者:唐刘 在前一篇文章中,我简单介绍了 Succinct Data Structure,这里我们继续介绍 SuRF。 Fast Succinct Tries SuRF 的核心数据结构就是 Fast Succinct Tries(FST),一种空间节省,支...

TiDB ⋅ 22分钟前 ⋅ 0

Kubernetes(六) - Secret和私有仓库认证

对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件...

喵了_个咪 ⋅ 23分钟前 ⋅ 0

DevOps的三大原则

DevOps的出现有其必然性。在软件开发生命周期中,遇到了两次瓶颈。第一次瓶颈是在需求阶段和开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,后来出现了敏捷方法论,强调适应需...

inidcard ⋅ 24分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部