TortoiseSVN客户端常用命令详解.doc_第1页
TortoiseSVN客户端常用命令详解.doc_第2页
TortoiseSVN客户端常用命令详解.doc_第3页
TortoiseSVN客户端常用命令详解.doc_第4页
TortoiseSVN客户端常用命令详解.doc_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

TortoiseSVN客户端常用命令详解TortoiseSVN客户端常用命令详解1、Checkout 首先要Checkout服务器端的Repository, 所谓的Checkout就是指获得服务器端指定的Repository存储的所有文件。Checkout的具体方式是: 在客户端新建一个空目录,比如:F:Project1 (确保是空的) 在该目录上单击右键,在弹出式菜单中选中SVN Checkout., 之后按要求录入内容: 然后点OK,会弹出一个认证对话框, 输入用户名和密码。点OK后就完成了对Repository的Checkout。检出后,所有检出文件上都打着绿色对勾: 命令方式检出1:在DOS命令中输入需要检出的目录:10:8081/svn/svnproject/Knowledge2:其中,意思是,检出文档是放在D盘的根目录下,是检出文档的存放位置,如下图:2、update获取版本库中最新版本,具体的方法是:在WC目录上单击右键,SVN Update。这时WC中的文件就是最新的版本了。3、commitcommit功能就是将你本地的文件修改记录上传到服务器上面,可以理解为上传。只会上传原先checkout然后又被修改了的文件,假如你新加入了某些文件,需要右键点击文件选择Add,然后文件上面会出现一个加号,在下次commit的时候才能选到该文件。commit页面:注意:commit的时候,最好填写Log信息,Log内容包括:修改了哪些东西及为什么做这些修改(what+why)强制必须录入log: property 中设置录入log最小长度,此时commit必须录入log,否则不允许提交.设置录入log最小长度页面:4、add将要添加的文件或者目录拷贝到WC下, 然后在该文件或目录上单击右键,TortoiseSVN-Add,点OK。 如果添加了不止一个文件或目录, 则鼠标不要在WC中点中任何文件, 然后单击右键,TortoiseSVN-Add, 就可以添加多个文件或目录。 这时文件的状态图标会发生如下变化: Add命令只是告诉本地的WC将该文件纳入版本管理, 并没有将这个改变提交到服务器端, 在F:Project1下单击右键,SVN Commit., 将你所做的修改提交到Repository。5、modify 用文本编辑器或IDE对文件修改后, 文件的状态图标会变化, 然后单击右键,SVN Commit. 即可提交修改。6、revert(1)、放弃未提交的修改, 单击右键,TortoiseSVN-Revert, 本地的WC中的文件和目录会恢复到修改前的状态。(2)、回复到之前某个revision状态: a、 在本地WC中单击右键,TortoiseSVN-Update to Revision., 然后输入你想要回复到的Revision号点OK按钮。此时仅仅是WC中回复到特定版本,对Repository没有任何影响。 b、把Repository回复到某个revision状态方法:方法一: 先执行Update命令将Working Copy更新到最新的Revision, 然后在Working Copy中单击右键, TortoiseSVN-Show Log, 弹出的Log Messages窗口中会显示该Repository的所有Revision, 选中最新的Revision,之后按住Shift键, 再单击你想回复到的Revision+1的那个Revision (比如Repository的最新Revision是79, 你想将Repository的状态回复到Revision60, 那么就选中Revision70,再按住Shift键, 选中Revision61, 就是说选中Revision61到Revision79之间的所有Revision)。 然后在选中的Revision上单击右键, 选中“Revert changes from these revision”。 再点Yes按钮,就可以将WC的状态回复到目标Revision60。 注意:此时只是WC回复到目标Revision,之后应该用Commit提交修改, 这样Repository最新状态就与WC的状态一致,都为 Revision60。方法二:采取大版本号向小版本号merge的方式,进行回滚保证我们拿到的是最新代码,TortoiseSVN右键merge,如果我们最新版本为79,要回滚到60,如下图,“From”的URL和“to”的URL均了录入要回复的文件在版本库的存放地址点“merge”,然后commit即可。7、delete 删除文件时,选中要删除的文件或目录, 单击右键,TortoiseSVN-Delete然后提交修改。注意千万不要用windows自己的“删除”或者“Delete”键来删除文件,否则将无法提交你的修改。 这一点对目录的删除来说尤为重要。 因为每个目录里有个 .svn隐藏目录 ,存放目录下文件的信息,使用操作系统命令delete/move时, .svn还指向原来的位置,所作操作不受SVN控制。8、move移动方法:(1)、选择你要移动的文件或目录(2)、拖拽(right-drag)他们到新的工作副本下,(3)、松开鼠标右键(4)、在弹出菜单选择上下文菜单 SVN 移动文件。 原理同上。9、Branche/Tag 操作方法:创建分支非常简单,只需在需要创建分支的工作目录上,使用TortoiseSVN Branch/Tag命令,在 To URL 项指定待创建的分支 url 即可实现本质:subversion对分支和标签是通过复制一份最新的版本库的快照来实现的。一般情况下,tag,是用来做一个milestone的,不管是不是release,都是一个可用的版本。这里应该是只读的,更多的是一个显示用的,给人一个可读(readable)的标记;branch,是用来做并行开发的,这里的并行是指和trunk进行比较。分支与标签的区别:在实现上,branch和tag,对于svn都是使用copy实现的,所以他们在默认的权限上和一般的目录没有区别。至于何时用tag,何时用branch,完全由人主观的根据规范和需要来选择,而不是强制的(比如cvs),一个不去做任何的修改的分支就是版本库某一时刻的一个快照,相当于为某一个版本做了一个标签Branch和Tag都是拷贝指向原始文件的链接,当你对拷贝做修改时,记录为相对原始文件的修改,称为延迟拷贝,效率高且几乎不占用空间。Tag:版本号是个好东西,但是我们更倾向于记住像第二预览发布版这样的名字,而不是V01这样的数字,标签是用来做这件事情的。版本控制系统可以让你给某一个时刻的一组文件或者一些目录或者整个项目分配一个名字。如果你给某几个文件分配标签“第二发布预览版”,以后就能使用这个标签签出它们。标签是一种很好地跟中项目代码开发过程中发生的重要事件的方式。分支合并:使用TortoiseSVN Merge命令,在“ From:(start URL and revision of the range to merge) ”中选择希望合并的目录 ( 如: trunk) ,并指定希望合并的开始 revision 编号,在“ To:(end URL and revision of the range to merge) ”中选择结束 revision 编号。然后点击“ merge ”完成合并操作,剩下的工作就是编辑冲突了。当然运气好的话是不需要这个过程滴。 值得注意的是,“ From: ”和“ To: ”中的 URL 通常是相同的,切记不要与创建分支时的含义混淆10、get lock/release lock选择工作副本中你想要获取锁定的文件,然后选择命令TortoiseSVN - Get lock出现一个对话框,允许你输入注释,这样别人知道你为什么锁定这个文件。注释是可选的,并且只用于基于Subversion 的库。选择需要锁定的文件在复选框打勾,点击“确定”按钮锁定选择的文件:出现一个对话框,输入正确的用户名和密码即可向版本库提交你想锁定文件的信息。锁定文件成功!返回信息!”Locked by admin”表示文件已被admin 用户锁定;”alpay_payto.php”表示锁定文件的名称。点击”OK”按钮确定锁定文件成功。释放锁定(取消锁定)选择工作副本中你想要取消锁定的文件,然后选择命令TortoiseSVN - Release lock之后操作同get lock。当被锁定文件commit后,会自动解锁,无需再去解锁;如果commit后还需上锁,则在commit时可选择:“keep lock”强制锁定:设置对象文件svn:needs-lock这个属性,update后强制文件的属性为只读,只有lock之后,才能对文件进行修改操作,commit-release lock之后,又自动变成只读。具体做法:先将a.jpg文件拷贝到WC中,然后在该文件上单击右键, TortoiseSVN-Add,告诉Subversion要将该文件纳入版本控制, 接着在该文件上单击右键并选中属性, 在弹出的属性对话框中选中Edit键,在property name中如下图。 在下拉框中选中“svn:needs-lock”, 并在下面的文本框中填入“*” (其实这里填什么都无所谓,只要文件有“svn:needs-lock”附加属性就行), 之后点Set按钮,“svn:needs-lock”附加属性就设置好了。 然后执行Commit命令提交修改。 这时当其他人执行Update时, a.jpg就会添加到他们的WC中, 并且文件的附加属性也会随文件一起被得到。 可以看到a.jpg此时的图标就是灰色的, 文件的Windows属性也是只读的11、clean upSVN 本地更新时,由于一些操作中断更新,如磁盘空间不够,用户取消,可能会造成本地文件被锁定的情况。一般出现这种情况的解决方法:(1)、可以使用SVN clean up来清除锁定。(2)、如果不是本目录锁定,系统提示上一层目录锁定,需要到上一层或者根目录中清除。(3).如果在根目录下都无法clean的话,一般采取的方法是另外找一个目录重新check out。但有时SVN目录下可能有一些自己本地修改的文件,还未提交到SVN服务器,这时重新check out需要注意本地文件的备份,并且不要强制覆盖服务器上其它人修改的内容。(4)、如果觉得第种很麻烦,可以考虑这样的方法。其实SVN加锁会在.SVN(隐藏文件)中生成一个名字叫lock的文件(无后缀),查找所有的手工删除。然后再尝试更新,系统可能会提示某个.base文件无法访问。找到它,把相关的文件或其所在的目录删除,重新update。工作量就小多了。12、export集成测试或项目上线需要版本时,使用export而不用checkout,export 得到干净的目录与文件,不带版本控制因素。13、Check for modifications同服务器上的项目版本进行比较,并可做相应的修改。14、Show log查看版本日志及不同版本间相互比较 15、Revision Graph版本示意图 16、Repo-Browser查看当前版本库,这是TortoiseSVN查看版本库的入口,通过这个菜单项,我们就可以进入配置库的资源管理器,然后就可以对配置库的文件夹进行各种管理,相当于我们打开我的电脑进行文件管理一样17、RenameSVN支持文件改名,点击Rename,弹出文件名称输入框,输入新的文件名称,点击确定,再把修改提交,即可完成文件改名。18、switch与relocate版本库转移,当我们版本库发生转移的时候就需要用到这个功能。例如我原先的版本库是建在U盘上的,现在转移到(复制整个配置库文件夹)开发服务器上,使用https代替文件系统的访问。因此就需要将原来的工作拷贝的目标版本库重新定位到开发服务器上。注意:relocate与switch的区别: (1)、如果WC反应相同的版本库目录,但是版本库本身位置改变了,使用relocate; (2)、如果WC需要反应一个版本库的新目录,素要switch。19、switch与svn update比较:svn switch和svn update的输出很像,switch命令只是update命令的一个超集。 当你运行svn update时,会告诉版本库比较两个目录树,版本库这样做,并且返回给客户区别的描述,svn switch和svn update两个命令唯一区别就是update会一直比较同一路径。 也就是了,如果你的工作拷贝是/calc/trunk的一个镜像,当运行svn update时会自动地比较你的工作拷贝的/calc/trunk与HEAD版本的/calc/trunk。如果你使用svn switch跳转工作拷贝到分支,则会比较你的工作拷贝的/calc/trunk与相应分支目录的HEAD版本。 换句话说,一个更新通过时间移动你的工作拷贝,一个转换通过时间和空间移动工作拷贝。 因为svn switch是svn update的一个变种,具有相同的行为,当新的数据到达时,任何工作拷贝的已经完成的本地修改会被保存,这里允许你作各种聪明的把戏20、diff:(下面是针对同一个文件而言)原本错误地理解了 diff 的意思是比较本地的文件与服务器的相应文件有什么不同,但实际意思并非这样。更准确地说这条语句的意思是比较一个文件中你修改过的部分与服务器的相应文件相应部分有什么不同,对于那些没有修改过的地方(同一文件中)不同也不会比较,当然可以先 up 一下再 svn diff 这样就保证了本地文件与服务器的相应文件的所有不同的地方全都显示出来了,当然冲突情况除外.21、dry run合并前看看结果会是什么样的.一个简单的办法就是运行dry run先看看,并不真实的将结果写入到工作副本中.它只是显示在合并过程中输出的执行结果状态码.比较高级的预言合并,当运行svn diff可能会给出太多的详细日志.22、create/apply patch (1)、使用create patch可以生成一个或者多个修改过的文件和当前版本差异的patch(支持目录树) 通常情况下,create patch将修改保存为.patch或.diff文件 可以将.patch或.diff文件的内容复制出来,发给需要审查的人 .patch或.diff文件中记录了发生这个patch的版本号以及具体修改的内容 针对某个文件或某几个文件的若干种修改,可以生成多个.patch或.diff文件 (2)、apply patch 可以将.patch或.diff文件应用到对应版本的项目,就像打补丁一样 同一个项目/文件夹下,可以选择应用需要的patch 通常来说,应用一个patch时文件版本和生成这个patch时文件的版本是一致的;如果不一致,也可以强制应用,svn会自动进行diff(这时候需要手动合并) linux下,可以使用系统的patch命令来应用patch,eg: patch -p0 Resolved 告诉Subversion已经解决了Conflict。 这时再执行Commit命令就能提交修改(生成Revision 12)。 Subversion 这种控制方式保证了你对文件所作的修改都是基于文件的最新版本。24、“.svn”目录 在客户端Working Copy的每一层目录中都会有一个“.svn”目录, 该目录是Subversion进行管理用的目录。 不要手动修改其中的文件。 该目录存储了Working Copy的一个副本 实际存储副本的地方是F:project1.svntext-base目录 比如:F:Project1是一个Working Copy, 该目录下有两个文件a.txt和b.txt还有一个子目录ccc, 子目录ccc中还有一个d.txt文件。 “.svn”目录中存储的是你最近一次执行完Update或者Commit命令之后当前目录中文件的副本, 比如:F:project1.svntext-base中存储的a.txt和b.txt 是最近一次执行完Update或者Commit命令之后F:project1下的a.txt和b.txt的拷贝。 也就是说你所作的修改都是基于“.svn”目录存储的那些文件。 这种机制可以让我们在不连接网络的情况下, 将Working Copy中的文件恢复到修改之前的状态。 Subversion的Revert命令就是利用了这种机制来实现的。 比如你修改了F:project1a.txt文件, 这时你又改变了主意想放弃对该文件的修改, 你可以单击右键,TortoiseSVN-Revert, 修改过的F:project1a.txt文件 就会被F:project1.svntext-base中a.txt文件的副本所替代, 使得a.txt恢复到修改前的状态。 Working Copy中每一个子目录下都会有一个“.svn”目录, 并不是只有最上层目录才有“.svn”目录。 所以,F:project1ccc下也有一个“.svn”目录, 该目录存储的是F:project1cccd.txt的副本 (d.txt的副本位于F:project1ccc.svntext-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文件, 它还是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。 也就是说当你Commit时,你的Working Copy中只有你提交的那些文件是最新版本, 而其他没有修改的文件并不会更新为最新版本。 这样就造成了你的Working Copy由不同的Revision文件所组成 (Revision24的a.txt文件和Revision26的b.txt文件)。 前面说过在提交修改前必须保证你是在文件的最新版本基础上修改, 如果在这种混合版本的情况下, 怎样才能知道当前Working Copy中的文件是否为最新版本? 在前面所说的“.svn”目录中有一个文件名为“entries”的文件, 该文件记录了当前Working Copy中的每一个文件的Revision, 因此当你Commit时,Subversion会从该文件中取得你提交文件的Revision, 再与Repository的最新Revision一比较就可以知道你修改的文件是否基于该文件的最新版本。 26、文件的附加属性 在Subversion中,每个文件可以拥有一种叫做附加属性的东西。 附加属性描述了该文件所拥有的一些特性。 Subversion已经预定义了一些附加属性(这里只是指Subversion已经定义了一些附加属性的“名称”, 并不是指已经将这些属性附加在文件上了, 比如默认情况下文本文件一开始不含任何属性, 直到人为的对该文件添加附加属性), 并且你可以对文件添加自定义的属性。 Subversion对待附加属性就像对待文件内容一样, 当修改了一个文件的附加属性(添加,改变,删除附加属性), 即使没有对文件的内容进行修改, 同样可以Commit该文件,就像更改了文件内容那样, Repository也会生成新的Revision, 所以从某种意义上来说, Subversion不区别对待文件的附加属性的修改和文件的内容的修改, 文件的附加属性可以看成是一种特殊的文件内容。 Subversion预定义了若干个附加属性, 这里只讨论“svn:needs-lock”属性, 因为它与我们上面的文件锁定会产生的一个问题有关。 其他的属性可以参考Subversion自带的帮助文档。 考虑这种情况, 张三和李四同时想对一个图片文件a.jpg作修改, 张三在修改时先将该文件锁定,然后进行修改,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论