SVN日常操作及常见错误
1. SVN简介
1.1 什么是TortoiseSVN?
TortoiseSVN 是 Subversion 版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录。文件保存在中央版本库,除了能记住文件和目录的每次修改以外,版本库非常像普通的文件服务器。你可以将文件恢复到过去的版本,并且可以通过检查历史知道数据做了哪些修改,谁做的修改。这就是为什么许多人将 Subversion 和版本控制系统看作一种“时间机器”。
某些版本控制系统也是软件配置管理(SCM)系统,这种系统经过精巧的设计,专门用来管理源代码树,并且具备许多与软件开发有关的特性 - 比如,对编程语言的支持,或者提供程序构建工具。不过 Subversion 并不是这样的系统;它是一个通用系统,可以管理任何类型的文件集,包括源代码。
1.2 TortoiseSVN 的特性
1. 重载图标
每个版本控制的文件和目录的状态使用小的重载图标表示,可以让你立刻看出工作副本的状态。
2. 目录版本控制
CVS 只能追踪单个文件的历史,但是 Subversion 实现了一个“虚拟”文件系统,可以追踪整个目录树的修改,文件和目录都是版本控制的,结果就是可以在客户端对文件和目录执行移动和复制命令。
3. 原子提交
提交要么完全进入版本库,要么一点都没有,这允许开发者以一个逻辑块提交修改。
4. 高效的分支和标签
分支与标签的代价不与工程的大小成比例,Subversion 建立分支与标签时只是复制项目,使用了一种类似于硬链接的机制,因而这类操作通常只会花费很少并且相对固定的时间,
以及很小的版本库空间。
5. 良好的维护能力
Subversion 没有历史负担,它由一系列良好的共享 C 库实现,具有定义良好的 API,这使Subversion 非常容易维护,可以轻易的被其他语言和程序使用。
1.3 安装 TortoiseSVN
TortoiseSVN 提供一个容易使用的安装程序。双击安装程序文件并按照提示操作。安装程序将会完成剩余的步骤。
properties是什么文件TortoiseSVN 的界面已经翻译成了许多种语言,所以你可以下载符合你要求的语言包。你可以在我们的翻译状态页 [tortoisesvn/translation_status]里看到语言包。如果没有你需要的,为什么不加入我们的团队并且提交你的翻译呢?-)
每一种语言包都是一个 .exe 安装程序,只要根据向导运行安装程序,当你下一次启动程序时,翻译就会生效。
2. 版本库
2.1 版本模型
2.1.1 jquery find方法返回值 文件共享的问题
考虑这个情景,我们有两个共同工作者,Harry 和 Sally,他们想同时编辑版本库里的同一个文件,如果首先 Harry 保存它的修改,过了一会,Sally 可能凑巧用自己的版本覆盖了这些文件,Harry 的更改不会永远消失(因为系统记录了每次修改),Harry 所有的修改不会出现在Sally 的文件中,所以 Harry 的工作还是丢失了—至少是从最新的版本中丢失了—而且是意外的,这就是我们要明确避免的情况!
javascript程序可以单独存在图 2.2. 需要避免的问题
2.1.2 锁定-修改-解锁 方案
图 2.3. 锁定-修改-解锁 方案
锁定-修改-解锁模型有一点问题就是限制太多,经常会成为用户的障碍:
• 锁定可能导致管理问题。有时候 Harry 会锁住文件然后忘了此事,这就是说 Sally 一直等待解锁来编辑这些文件,她在这里僵住了。然后 Harry 去旅行了,现在 Sally 只好去管理员放开锁,这种情况会导致不必要的耽搁和时间浪费。
• 锁定可能导致不必要的线性化开发。如果 Harry 编辑一个文件的开始,Sally 想编辑同一个文件的结尾,这种修改不会冲突,设想修改可以正确的合并到一起,他们可以轻松的并行工作而没有太多的坏处,没有必要让他们轮流工作。
• 锁定可能导致错误的安全状态。假设 Harry 锁定和编辑一个文件 A,同时 Sally 锁
定并编辑文件 B,如果 A 和 B 互相依赖,这种变化是必须同时作的,这样 A 和B 不能正确的工作了,锁定机制对防止此类问题将无能为力—从而产生了一种处于安全状态
的假相。很容易想象 Harry 和 Sally 都以为自己锁住了文件,而且从一个安全,孤立的情况开始工作,因而没有尽早发现他们不匹配的修改。
2.1.3 复制-printful修改-合并 方案
Subversion,CVS 和一些版本控制系统使用复制-修改-合并模型,在这种模型里,每一个客户读取项目版本库建立一个私有工作副本—版本库中文件和目录的本地映射。用户并行工作,修改各自的工作副本,最终,各个私有的复制合并在一起,成为最终的版本,这种系统通常可以辅助合并操作,但是最终要靠人工去确定正误。
图 2.4. 复制-修改-合并 方案
图 2.5. 复制-修改-合并 方案(续)
但是如果 Sally 和 Harry 的修改重叠了该怎么办?这种情况叫做冲突,这通常不是个大问题,当 Harry 告诉他的客户端去合并版本库的最新修改到自己的工作副本时,他的文件 A 就会处于冲突状态: 他可以看到一对冲突的修改集,并手工的选择保留一组修改。需要注意
的是软件不能自动的解决冲突,只有人可以理解并作出智能的选择,一旦 Harry 手工的解决了冲突(也需要与 Sally 讨论),他就可以安全的把合并的文件保存到版本库。
复制-修改-合并模型感觉是有一点混乱,但在实践中,通常运行的很平稳,用户可以并行的工作,不必等待别人,当工作在同一个文件上时,也很少会有重叠发生,冲突并不频繁,处理冲突的时间远比等待解锁花费的时间少。
最后,一切都要归结到一条重要的因素: 用户交流。当用户交流贫乏,语法和语义的冲突就会增加,没有系统可以强制用户完美的交流,没有系统可以检测语义上的冲突,所以没有任何证据能够承诺锁定系统可以防止冲突,实践中,锁定除了约束了生产力,并没有做什么事。
有一种情况下锁定-修改-解锁模型会更好,也就是你有不可合并的文件(即二进制文件),例如你的版本库包含了图片,两个人同时编辑这个文件,没有办法将这两个修改合并,Harry 或 Sally 会丢失他们的修改。
2.2.2 版本库访问 URL
方案 | 访问方法 |
file:// | 直接版本库访问(本地磁盘或者网络磁盘)。 |
通过WebDAV 协议访问支持 Subversion 的 Apache 服务器。 | |
与 相似,但是用 SSL 加密。 | |
svn:// | 通过未认证的未认证的 TCP/IP 自定义协议访问 svnserve 服务器。 |
svn+ssh:// | 通过认证并加密的认证并加密的 TCP/IP 自定义协议访问 svnserve 服务器。 |
2.2 版本库布局
/trunk 主开发目录
/branches 分支目录,每个用户可以在开发的过程中创建分支进行开发,然后通过合并成为完成的项目(我们项目中放入的是版本分支)
/tags 具有特殊意义的版本目录。(我们项目中放在branches中)
3.日常使用指南
3.1 基本的工作循环
典型的工作周期是这样的:
1. 更新你的工作拷贝。
• svn update
2. 做出修改
• svn add
• svn delete
• svn copy
• svn move
3. 检验修改
• svn status
• svn diff
4. 可能会取消一些修改
• svn revert
5. 解决冲突(合并别人的修改)
• svn update
• svn resolved
6. 提交你的修改
• svn commit
3.1.1 更新工作副本
选择• svn update更新功能,用来更新其他人对上次工作副本的更改,以达到本机副本与版本库资源一致。
3.1.2 修改工作副本
在本地工作副本进行相应的修改后,将所做的修改预添加到版本库,即使用add功能菜单,将本地修改用svn进行管理控制
3.1.3 检查你的修改
当你完成修改,你需要提交他们到版本库,但是在此之前,检查一下做过什么修改是个好主意,通过提交前的检查,你可以整理一份精确的日志信息,你也可以发现你不小心修改的文件,给了你一次恢复修改的机会。此外,这是一个审查和仔细察看修改的好机会。你可以通过与资源库进行对比,知道自己修改了什么:
1. 在myeclipse或eclipse下svn插件:选中需要同步的目录,右键选择“Team——>与资源库同步”:
即可以看到本地修改和资源库其他人所做的修改:
:为资源库中其他人做了修改的文件
:为本地工作副本所做修改的文件
:汇编语言of怎么判断所有做了修改的文件
: 冲突文件
选中要对比的文件,右键选择“open incompare editor“:
即可以看到当前资源库中的最新内容与本地工作副本所做的修改有哪些:
然后根据本地工作副本与资源库中的最新内容的不同,进行更新、合并、手动解决冲突等操作。
2. 在Tortoise svn客户端下:可以选中菜单Check For Modifications:
即可以看到本地修改文件:
点击“compare with base”(与资源库同步),则可以看到该文件在本地所做的修改:
上面的工具条:
可以将资源库中的内容更新到本地工作副本中。
点击下面的按钮“check Repository”则可以看到版本库中其他人所做的修改:
其他操作同上,也可以看到文件与本地工作副本的更改,并可以进行合并、冲突解决等一系列操作。
3.1.4 取消本地修改
假定我们在看本地与资源库修改的输出,你发现对某个文件的所有修改都是错误的,或许你根本不应该修改这个文件,或者是从开头重新修改会更加容易。
这是使用svn revert的好机会。
Subversion把文件恢复到未修改的状态,叫做.svn目录的“原始”拷贝,应该知道svn revert可以恢复任何预定要做的操作,举个例子,你不再想添加一个文件或者你不小心删除了一个文件,只要选中该文件或目录,右键选择Team——>还原操作:
1.myeclipse和eclipse的svn插件下的还原操作:
2. 在Tortoise svn客户端下还原操作:
使用还原操作则可以讲本地所做的修改取消,与资源库保持一致。
3.1.5 解决冲突(合并别人的修改)
在svn文件提交的过程中,经常会出现有冲突的现象,在svn中一般以红标记作为警示。冲突分为两种情况:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论