收藏 分享(赏)

TortoiseSVN操作说明.ppt

上传人:ysd1539 文档编号:7069975 上传时间:2019-05-05 格式:PPT 页数:21 大小:1.06MB
下载 相关 举报
TortoiseSVN操作说明.ppt_第1页
第1页 / 共21页
TortoiseSVN操作说明.ppt_第2页
第2页 / 共21页
TortoiseSVN操作说明.ppt_第3页
第3页 / 共21页
TortoiseSVN操作说明.ppt_第4页
第4页 / 共21页
TortoiseSVN操作说明.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、SVN操作说明,状元网中国最大教育资源网站 百万试题,课件,教案,论文免费下载 ,首先要Checkout服务器端的Repository, 所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件。 这个Checkout和Visual Source Safe的Checkout意义完全不一样, Checkout的具体方式是: 在客户端新建一个空目录,比如:F:Project1 在该目录上单击右键,在弹出式菜单中选中SVN Checkout., 之后在“URL of Repository”文本框中填入你想要连接的Repository的地址, 这个URL地址可以用浏览方式加入。

2、 URL应该是“svn:/xxx/project1” xxx可以是服务器端主机名,也可以是服务器端的ip地址)。 然后点OK,会弹出一个认证对话框,输入在教程第三节设置的用户名和密码。 点OK后就完成了对Repository的Checkout。 比如:在服务器端Repository中有一个a.txt文件, 那么Checkout之后F:Project1目录下也会出现一个a.txt文件。 现在F:Project1中的文件和目录就叫做Repository的“Working Copy”简写“WC”,1.Checkout Repository,2.添加文件,将要添加的文件或者目录拷贝到F:Project

3、1下, 然后在该文件或目录上单击右键,TortoiseSVN-Add,点OK。 如果添加了不止一个文件或目录, 则鼠标不要在F:Project1中点中任何文件, 然后单击右键,TortoiseSVN-Add, 就可以添加多个文件或目录。 这时文件的状态图标会发生变化。 Add命令只是告诉本地的“Working Copy”将该文件纳入版本管理, 并没有将这个改变提交到服务器端, 如果想要别人也看见你对Repository的修改,你需要 在F:Project1下单击右键,SVN Commit., 将你所做的修改提交到Repository。 文件的状态图标也会更新。 不管你在“Working Cop

4、y”内添加、修改、删除文件后, 要想其他人也看见你的修改, 都必须用Commit命令将所做修改递交到服务器端的Repository。,3.修改文件,用文本编辑器或IDE对文件修改后, 文件的状态图标会变化, 然后单击右键,SVN Commit. 提交修改,只有当执行Commit提交修改后, 你所作的修改才会反映到服务器端的Repository中。,4.删除文件,删除文件时,选中要删除的文件或目录, 单击右键,TortoiseSVN-Delete,提交修改。 注意千万不要用“Delete”键来删除文件,否则将无法提交你的修改。 这一点对目录的删除来说尤为重要。,5.放弃修改,当你添加、修改、删除

5、文件后,决定放弃修改, 你可以单击右键,TortoiseSVN-Revert, 本地的“Working Copy”中的文件和目录会恢复到你修改前的状态。,6.获取Repository的最新版本,用Update命令。 接着前面的例子,这时F:Project1已经成为一个“Working Copy”了 (通过执行Checkout命令),现在其他人已经对Repository进行了修改, 具体的方法是:在F:Project1目录上单击右键, SVN Update。这时F:Project1中的文件就是最新的版本了。注意,如果当你的“Working Copy”中有被修改的文件, 或者有被删除的文件,并且还

6、未提交这些修改时, 这些文件在执行Update过程中是不会被更新的。 比如你修改了F:Project1下a.txt文件, 还未提交修改,那么, 当你对F:Project1进行Update时, a.txt文件是不会更新为Repository上的a.txt文件的。 所以如果想放弃当前的所有修改, Project1下所有文件及目录更新到最新版本, 并将F:应该先对F:Project1执行Revert命令再执行Update命令。,7.subversion的版本控制模型,当你用subversion进行版本控制时, Subversion会记录你对Repository进行的每一次修改(包括添加,修改,删除等

7、等), 每修改一次Repository都会产生一个新的Revision(修订版本号), 不同的Revision代表了不同时刻Repository的状态, 因此我们可以用这个Revision回朔任意时刻Repository的状态, 就像时间机器一样,也就是说某一Revision 就是Repository在某一时刻的一个“快照”。 注意:Revision不是针对某一个文件或者目录, 而是针对整个Repository而言的。 每修改一次Repository,Revision 都会增加1。 Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 考

8、虑这种情况: 张三和李四是公司同一个部门的同事, 他们共同维护一个文本文件a.txt, 并且对该文件进行版本控制,,因此他们把这个文件放到一个Repository上共同维护该文件。 周一上午9点,张三和李四同时想对a.txt文件进行修改, 于是他们同时从Repository上取得该文件的最新版本(Revision 10), 然后进行修改。过了三分钟,张三首先完成了修改, 他在该文件的第五行修改了一个单词的拼写(将Typo改为Type), 于是张三对修改后的文件执行Commit命令, 将修改提交到服务器端的Repository中。 这时Repository的Revision变为11。六分钟过后,

9、李四也完成了他的修改, 他修改了该文件第十行上的一个单词拼写(将He改为She), 于是他也对修改后的文件执行Commit命令, 这时Subversion 在提交修改时会发现, 李四修改的文件是Revision10的a.txt文件, 而不是最新的Revision 11的a.txt文件。 于是,Subversion 提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这时Subversion会提示已经完成合并,,李四的a.txt文件的第五行的“Typo”已经变为了“Type”, 第十行还是“S

10、he”,就是说Subversion已经将张三的修改“合并”到李四的a.txt文件中了。 之后,李四再执行Commit命令,就能将他对第十行的修改(将He改为She) 提交到服务器端的Repository中了(生成Revision 12)。 但是这种合并在某些情况下会变得复杂一些, 比如:李四对a.txt文件的修改并不是第十行, 而是与张三同样修改第五行的单词, 李四将“Typo”改为“Typr”,并且提交修改, 这时Subversion会提示李四在提交修改前, 应该先将Working Copy更新到最新版本, 李四执行Update命令将Working Copy更新到Revision 11, 这

11、时Subversion将Revision11的a.txt文件与 李四修改的a.txt文件进行合并时发现李四修改的同样是第五行, 于是Subversion就无法判断是李四的修改(“Tpyr”) 正确还是张三的修改(“Type”)正确, 因为他们都是在Revision10的a.txt基础上作的修改。 这种情况叫做Conflict(冲突), a.txt文件的图标会变成一个黄色三角。 这时,只能依靠李四自己去判断到底第三行应该修改为“Typr”还是“Type”。 当李四确定修改之后,在a.txt文件上单击右键,TortoiseSVN-Resolved 告诉Subversion已经解决了Conflict

12、。 这时再执行Commit命令就能提交修改(生成Revision 12)。 Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。,8.“.svn”目录,在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录。 不要手动修改其中的文件。 该目录存储了Working Copy的一个副本每个“.svn”目录只存储同级目录中的“文件”副本, 而不存储“目录”副本。“.svn”目录存有许多重要的内容, 所以前面说在删除文件或目录时, 必须用TortoiseSVN-Delete, 而不能用“Delete”键来删

13、除文件或目录,尤其是对于目录的删除。,9.混合版本,比如F:Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt。 执行Update命令,将Working Copy更新到最新版本(Revision 24)。 这时,a.txt和b.txt的Revision都是24你的同事修改了a.txt,并且提交了修改, 这时Repository的Revision就变成25了。 注意,这时你没有再次执行Update, 因此你的Working Copy的Revision还是24。 这时你修改了b.txt文件,并提交修改。 因为Revision25并没有对b.txt文件进行修改

14、, 因此你对b.txt文件的修改是基于b.txt文件最新的版本, 所以不会出现Conflict。 当你提交b.txt的修改后,产生Revision26。这时你会发现你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件, 它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。,如果在这种混合版本的情况下, 怎样才能知道当前Working Copy中的文件是否为最新版本? 在前面所说的“.svn”目录中有一个文件名为“entries”的文件, 该文件记录了当前Working Copy中的每一个文件的Revisi

15、on, 因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision, 再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。,10.文件的锁定,前面说过Subversion的版本控制模型是一种叫做Copy-Modify-Merge (拷贝-修改-合并)的模型。 该模型在对文本文件进行版本控制时工作的很好, 但是有些需要进行版本控制的文件并不是文本文件, 比如说图像文件,这种模型在这种情况下就不能正常工作了, 因为文本文件可以合并,而二进制文件则无法合并。 所以Subversion从1.2开始支持一种叫Lock-Modi

16、fy-Unlock (锁定-修改-解锁)的版本控制模型 TortoiseSVN-Get Lock.再点OK按钮, 这时就完成了对文件的锁定。 这时,如果其他人想对文件进行锁定时, Subversion会对他提示该文件已经被别人锁定。 当你修改完文件后,然后单击右键,SVN Commit., 将修改提交,默认情况下,提交的时候就会对该文件解锁, 如果你想仍然锁定该文件,请在commit时弹出的对话框中选中keep lock复选框。,11.文件的附加属性,张三和李四同时想对一个图片文件a.jpg作修改, 张三在修改时先将该文件锁定,然后进行修改, 同时李四也开始对该文件进行修改, 但李四忘记了对非

17、文本文件进行修改时应该先锁定该文件。这就意味着张三和李四之间必定有一个人的修改会作废。 应用“svn:needs-lock”属性可以避免这个问题。 当一个文件拥有“svn:needs-lock”属性时, 该文件在没有锁定时,文件的图标是灰色的, 表示该文件是一个只读文件(该文件的Windows只读属性的复选框为选中), 这个灰色的图标就会提醒想对该文件进行修改的人, 在修改该文件之前应该首先锁定该文件。 锁定该文件之后,文件的只读属性就会去掉了, 一旦释放掉锁,文件的图标又会变成灰色, 文件也会变成只读的了。,首先将a.jpg文件拷贝到Working Copy中, 然后在该文件上单击右键, T

18、ortoiseSVN-Add,告诉Subversion要将该文件纳入版本控制, 接着在该文件上单击右键并选中属性, 在弹出的属性对话框中选中Subversion页。 在下拉框中选中“svn:needs-lock”, 并在下面的文本框中填入“*” (其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行), 之后点Set按钮,“svn:needs-lock”附加属性就设置好了。 然后执行Commit命令提交修改。 这时当其他人执行Update时, a.jpg就会添加到他们的Working Copy中, 并且文件的附加属性也会随文件一起被得到。 可以看到a.jpg此时的图标

19、就是灰色的, 文件的Windows属性也是只读的。,文件的附加属性,12.回到以前的版本,我想看看Repository在Revision24时的状态, 可以在本地的Working Copy中单击右键, TortoiseSVN-Update to Revision., 然后输入你想要回复到的Revision号,点OK按钮。 上面的那种方法只是将本地的Working Copy回复到以前的状态, 而服务器端的Repository并没有回到以前的状态。 将Repository的最新Revison的状态回复到以前某个Revision的状态具体的方法是,先执行Update命令将Working Copy更新

20、到最新的Revision, 然后在Working Copy中单击右键,TortoiseSVN-Show Log, 弹出的Log Messages窗口中会显示该Repository的所有Revision, 选中最新的Revision,之后按住Shift键, 再单击你想回复到的Revision+1的那个Revision (比如Repository的最新Revision是30, 你想将Repository的状态回复到Revision16, 那么就选中Revision30,再按住Shift键, 选中Revision17, 就是说选中Revision17到Revision30之间的所有Revision)

21、。 然后在选中的Revision上单击右键, 选中“Revert changes from these revision”。 再点Yes按钮,就可以将Working Copy的状态回复到目标Revision。 注意,此时只是Working Copy回复到目标Revision, 之后应该用Commit提交修改, 这样Repository最新状态就与目标Revision的状态一样了。 这两种回复到以前版本的方式截然不同, 第一种方式是将整个Working Copy回复到某个Revision, 也就是说这种方式Working Copy中的“.svn”目录所存的文件副本也与目标Revision的一模一

22、样, 如果这时你没有修改文件,你将不能执行Commit命令。 而第二种方式客户端Working Copy中的 “.svn”目录所存的副本始终是最新的Revision的文件副本 (这里我们基于一个假设:在Update之后没有其他人对Repository做修改)。 这种方式就像是我们自己手工将Working Copy的文件状态修改为目标Revision, 在修改之后提交修改一样。,13.查看修改,有时我们对Working Copy的许多文件进行了修改, 这些文件位于不同的子目录,我们就可以在Working Copy的最上层目录单击右键, TortoiseSVN-Check For Modifications, 弹出的对话框就会显示你所做的所有修改明细。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 说明文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报