TortoiseSVN客户端常用命令详解(7)

2025-07-01

TortoiseSVN客户端常用命令详解

(2)、apply patch

可以将.patch或.diff文件应用到对应版本的项目,就像打补丁一样 同一个项目/文件夹下,可以选择应用需要的patch

通常来说,应用一个patch时文件版本和生成这个patch时文件的版本是一致的;如果不一致,也可以强制应用,svn会自动进行diff(这时候需要手动合并) linux下,可以使用系统的patch命令来应用patch,eg: patch -p0

(3)、使用

暂时不需要提交或不允许提交的修改,可以选择create patch来保存修改的内容

选择create patch来保存修改的内容并且提交patch,通过审查后,(在服务器端)应用patch 当一个功能有多种解决方案时,可以生成多个patch,(提交后)分别经过测试,再决定应用哪个patch

多个功能分别需要改同一个文件的不同地方(即没有同一行),可以做成多个patch,应用patch的顺序没有要求(在linux下应用也一样成功,只是会生成多个.orig文件)

多个连续性的功能,他们修改的文件都与一个base作patch,例:p1在v1的基础上开发v2,生成v2和v1之间的patch1;p2在v2的基础上开发v3,生成v3和v1之间的patch2,这样只要应用patch2也就应用了patch1。

(4)、带来的问题

一个较早的patch,在经过多轮提交后,如果想再要应用,需要严格的diff

如果两个patch分别改了同一行代码,应用第一个patch后要再应用第二个patch时,仍然需要diff。如果在linux下,会产生冲突,生成.orig和.rej两个文件(此时仍然需要手动进行比较合并)

第3部分提到的连续性,要准确的预见到,比较困难

第3部分提到的多个连续的功能,后做的功能的某个文件更新了先做的功能的内容,但先做的功能可能还涉及到其他文件,容易造成漏更新文件的情况

23、subversion的版本控制模型

当你用subversion进行版本控制时,

Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等等), 孙管理 第31 页

TortoiseSVN客户端常用命令详解

每修改一次Repository都会产生一个新的Revision(修订版本号), 不同的Revision代表了不同时刻Repository的状态,

因此我们可以用这个Revision回朔任意时刻Repository的状态, 就像时间机器一样,也就是说某一Revision 就是Repository在某一时刻的一个“快照”。 注意:Revision不是针对某一个文件或者目录, 而是针对整个Repository而言的。

每修改一次Repository,Revision 都会增加1。 Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 考虑这种情况:

张三和李四是公司同一个部门的同事, 他们共同维护一个文本文件a.txt, 并且对该文件进行版本控制,

因此他们把这个文件放到一个Repository上共同维护该文件。 周一上午9点,张三和李四同时想对a.txt文件进行修改,

于是他们同时从Repository上取得该文件的最新版本(Revision 10), 然后进行修改。过了三分钟,张三首先完成了修改,

他在该文件的第五行修改了一个单词的拼写(将Typo改为Type), 于是张三对修改后的文件执行Commit命令, 将修改提交到服务器端的Repository中。 这时Repository的Revision变为11。 六分钟过后,李四也完成了他的修改,

他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令, 这时Subversion 在提交修改时会发现, 李四修改的文件是Revision10的a.txt文件, 而不是最新的Revision 11的a.txt文件。

孙管理 第32 页

TortoiseSVN客户端常用命令详解

于是,Subversion 提示李四在提交修改前, 应该先将Working Copy更新到最新版本,

李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion会提示已经完成合并,

李四的a.txt文件的第五行的“Typo”已经变为了“Type”,

第十行还是“She”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。

之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She) 提交到服务器端的Repository中了(生成Revision 12)。 但是这种合并在某些情况下会变得复杂一些, 比如:李四对a.txt文件的修改并不是第十行, 而是与张三同样修改第五行的单词,

李四将“Typo”改为“Typr”,并且提交修改, 这时Subversion会提示李四在提交修改前, 应该先将Working Copy更新到最新版本,

李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion将Revision11的a.txt文件与

李四修改的a.txt文件进行合并时发现李四修改的同样是第五行, 于是Subversion就无法判断是李四的修改(“Tpyr”) 正确还是张三的修改(“Type”)正确,

因为他们都是在Revision10的a.txt基础上作的修改。 这种情况叫做Conflict(冲突), a.txt文件的图标会变成一个黄色三角。

这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。 当李四确定修改之后,在a.txt文件上单击右键,TortoiseSVN->Resolved 告诉Subversion已经解决了Conflict。

这时再执行Commit命令就能提交修改(生成Revision 12)。

Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。

孙管理 第33 页

TortoiseSVN客户端常用命令详解

24、“.svn”目录

在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录。 不要手动修改其中的文件。

该目录存储了Working Copy的一个副本

实际存储副本的地方是F:\\project1\\.svn\\text-base目录

比如:F:\\Project1是一个Working Copy,

该目录下有两个文件a.txt和b.txt还有一个子目录ccc, 子目录ccc中还有一个d.txt文件。

“.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录中文件的副本,

比如:F:\\project1\\.svn\\text-base中存储的a.txt和b.txt

是最近一次执行完Update或者Commit命令之后F:\\project1下的a.txt和b.txt的拷贝。 也就是说你所作的修改都是基于“.svn”目录存储的那些文件。 这种机制可以让我们在不连接网络的情况下, 将Working Copy中的文件恢复到修改之前的状态。 Subversion的Revert命令就是利用了这种机制来实现的。 比如你修改了F:\\project1\\a.txt文件, 这时你又改变了主意想放弃对该文件的修改, 你可以单击右键,TortoiseSVN->Revert, 修改过的F:\\project1\\a.txt文件

就会被F:\\project1\\.svn\\text-base中a.txt文件的副本所替代, 使得a.txt恢复到修改前的状态。

Working Copy中每一个子目录下都会有一个“.svn”目录, 并不是只有最上层目录才有“.svn”目录。 所以,F:\\project1\\ccc下也有一个“.svn”目录, 该目录存储的是F:\\project1\\ccc\\d.txt的副本

孙管理 第34 页

TortoiseSVN客户端常用命令详解

(d.txt的副本位于F:\\project1\\ccc\\.svn\\text-base)。 也就是说每个“.svn”目录只存储同级目录中的“文件”副本, 而不存储“目录”副本。“.svn”目录存有许多重要的内容, 所以前面说在删除文件或目录时, 必须用TortoiseSVN->Delete,

而不能用windows自带的”删除”或者“Delete”键来删除文件或目录,尤其是对于目录的删除。

25、混合版本

Subversion的Working Copy被设计成一种能够包含不同版本的文件共存的形式。 比如F:\\Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt。

执行Update命令,将Working Copy更新到最新版本(Revision 24)。 这时,a.txt和b.txt的Revision都是24 (其实对于单个文件来说并不存在Revision, Revision是对于整个Repository而言的,

这里所指的是Repository的Revision24所存储的a.txt和b.txt, 但为了方便而采用这种描述方式,请注意,下同)。 之后,你的同事修改了a.txt,并且提交了修改, 这时Repository的Revision就变成25了。 注意,这时你没有再次执行Update, 因此你的Working Copy的Revision还是24。 这时你修改了b.txt文件,并提交修改。 因为Revision25并没有对b.txt文件进行修改,

因此你对b.txt文件的修改是基于b.txt文件最新的版本, 所以不会出现Conflict。

当你提交b.txt的修改后,产生Revision26。

这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件, 孙管理 第35 页


TortoiseSVN客户端常用命令详解(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高中历史课评课稿(共5篇)

相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219