• 教学
  • 下载
  • 作文
  • 知识
  • 课件
  • 教案
当前位置:问学网常识网电脑知识网络知识TortoiseSVN使用教程» 正文

TortoiseSVN使用教程

[07-22 14:57:44]   来源:http://www.wenxue9.com  网络知识   阅读:8188

概要: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无线上网
《TortoiseSVN使用教程》相关文章
[已有条评论] 我来点评
验证码: 昵称: