概要: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文件。 于是,Subversion 提示
TortoiseSVN使用教程,标签:电脑网络知识,电脑基础教程,http://www.wenxue9.com
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文件。
于是,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 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。
8.“.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的副本
(d.txt的副本位于F:\project1\ccc\.svn\text-base)。
也就是说每个“.svn”目录只存储同级目录中的“文件”副本,
而不存储“目录”副本。“.svn”目录存有许多重要的内容,
所以前面说在删除文件或目录时,
必须用TortoiseSVN->Delete,
而不能用“Delete”键来删除文件或目录,尤其是对于目录的删除。
9.混合版本
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.上一页 [1] [2] [3] [4] 下一页
Tag:网络知识,电脑网络知识,电脑基础教程,电脑知识 - 网络知识
上一篇:如何共享3G无线上网