我是一个刚到企业的新手。以前没用过svn。怎样才能最快的速度掌握?能详细说说吗?

复制以下,慢慢来,凭经验说话。

Svn(subversion)是近年来兴起的版本管理工具,是cvs的继承者。目前大多数开源软件都使用svn作为代码版本管理软件。

客户端的使用

1.签出存储库

首先,在服务器端签出存储库。

所谓签出是指获取服务器指定的存储库中存储的所有文件。

这种签出的意义与Visual Source Safe完全不同。

VSS的签出是指锁定文件。如果您以前使用过VSS,

学习颠覆一定要注意这个问题。

具体的结账方式是:

在客户端创建一个空目录,例如:F:\Project1。

右键单击目录并选择“SVN签出”...在弹出菜单中。

然后在“存储库的URL”文本框中填写您想要连接的存储库的地址。

此URL地址可以通过浏览添加。

对于本教程第二部分中建立的存储库,

网址应该是“svn://xxx/project1”。

(xxx可以是服务器的主机名,也可以是服务器的ip地址)。

然后点击确定,会弹出一个认证对话框。

输入在本教程第三部分中设置的用户名和密码。

单击“确定”完成存储库的签出。

例如,在服务器端存储库中有一个a.txt文件。

那么签出后F:\Project1目录下也会出现一个a.txt文件。

在这个例子中,由于服务器端储存库没有添加任何文件,

所以在客户端的F:\Project1下没有签出任何文件。

除了生成存储在F:\Project1的存储库中的文件和目录之外,

的隐藏目录”。svn”也生成了,它由subversion管理。

不要删除或手动更改文件和目录。

现在F:\Project1中的文件和目录称为资源库的“工作副本”,缩写为“WC”。

这是的简称...可汗。

将来修改、添加和删除存储库中的文件和目录的操作,

都是通过这个“工作副本”的操作来实现的。

在执行结帐后,

在F:\Project1目录中,您会在图标的左下角看到一个小的状态图标。

(当F:\Project1目录下的文件发生变化时,这个状态图标也会发生变化),

这意味着F:\Project1是一个存储库的“工作副本”。

f:\ Project 1中的所有文件和目录都会有类似的状态图标。

添加文件

将要添加的文件或目录复制到F:\Project1。

然后右键单击文件或目录,Tortoisesvn->;添加,点击确定

如果添加了多个文件或目录,

然后不要点击F:\Project1中的任何文件。

然后右击,TortoiseSVN-& gt;添加,

您可以添加多个文件或目录。

文件的状态图标将会改变。

Add命令只是告诉本地“工作副本”将文件放入版本管理中。

此更改未提交给服务器。

如果您希望其他人看到您对存储库的更改,您需要

在F:\Project1下单击鼠标右键,SVN提交...

将您的更改提交到存储库。

文件的状态图标也将被更新。

无论您在“工作副本”中添加、修改或删除文件,

如果其他人想看你的修改,

您必须使用Commit命令将更改提交到服务器端存储库。

修改文件

用文本编辑器或IDE修改文件后,

文件的状态图标会改变,

然后右击,SVN提交。...

提交修改,并且仅在提交修改之后,

您的更改将反映在服务器端存储库中。

删除文件

删除文件时,选择要删除的文件或目录。

右击,TortoiseSVN-& gt;删除,提交修改。

注意不要使用“删除”键删除文件,否则您将无法提交您的更改。

这对于删除目录尤其重要。

5.放弃修改

当您添加、修改或删除文件时,您决定放弃修改。

你可以右击,TortoiseSVN-& gt;回复,

本地“工作副本”中的文件和目录将恢复到您修改它们之前的状态。

6.获取最新版本的存储库

当一个团队合作开发一个项目时,

每个人都在不断更新存储库。

你需要不断更新你的“工作副本”。

获取项目的最新文件。

当您第一次获得最新的存储库文件时,

我们使用前面介绍的Checkout命令。

以后拿到最新文件就不需要签出了。

请改用Update命令。

按照前面的例子,F:\Project1已经成为“工作副本”。

(通过执行Checkout命令),现在其他人已经修改了存储库,

我想把别人的修改反映到我的“工作文案”里。

具体方法是:右击F:\Project1目录,

SVN最新消息.此时F:\Project1中的文件是最新版本。

请注意,如果您的“工作副本”中有修改过的文件,

或者存在已删除的文件,并且这些更改尚未提交,

这些文件在更新过程中不会被更新。

比如修改F:\Project1下的a.txt文件,

没有提交任何更改,那么,

当您更新F:\Project1时,

a.txt文件不会更新为存储库上的a.txt文件。

所以如果你想放弃目前所有的修改,

并将F:\Project1下的所有文件和目录更新到最新版本,

Revert命令应该在Update命令之前在F:\Project1上执行。

7.subversion的版本控制模型

当您使用subversion进行版本控制时,

Subversion将记录您对存储库所做的每一个修改(包括添加、修改、删除等等)。).

每次修改存储库时,都会生成一个新的修订号。

不同的版本代表了不同时间的存储库状态。

因此,我们可以使用这个版本随时调用存储库的状态。

就像时光机一样,也就是说,修订版

是存储库在某一时刻的“快照”。

注意:版本不是特定于文件或目录的。

而是针对整个存储库。

每次修改存储库时,修订版都会增加1。

Subversion的版本控制模型叫做复制-修改-合并。

(复制-修改-合并)模型。

考虑这种情况:

张三和李四是公司同一个部门的同事。

他们维护一个文本文件a.txt,

并控制文件的版本,

所以他们把这个文件放在一个仓库里并维护它。

周一上午9点,张三和李四同时要修改a.txt文件。

所以他们也从存储库中获得了文件的最新版本(修订版10)。

然后做出改变。三分钟后,张三先完成了修改。

他更改了文件第五行中一个单词的拼写(将错别字改为打字)。

于是张三对修改后的文件执行了Commit命令。

将更改提交到服务器端存储库。

此时,存储库的修订版变为11。

六分钟后,李四也完成了他的复习。

他修改了文件第十行一个单词的拼写(把He改为She)。

因此,他还对修改后的文件执行了Commit命令。

这时,Subversion会发现在提交变更时,

李四修改的文件是版本10的. txt文件。

而不是最新版本的11 a.txt文件。

所以,Subversion提醒李四,在提交修改之前,

您应该首先将工作副本更新到最新版本。

李四执行更新命令,将工作副本更新为版本11。

Subversion将提示合并已经完成。

李四的a.txt文件第五行的“错别字”改成了“类型”。

第十行还是“她”,意思是Subversion已经把张三的修改“合并”到李四的a.txt文件里了。

之后李四会再次执行Commit命令,然后就可以修改第十行了(把He改成She)。

已提交到服务器端存储库(生成修订版12)。

但是,这种合并在某些情况下会变得更加复杂。

比如李四修改a.txt文件不是第十行。

而是像张三一样,修改第五行中的文字。

李四将“Typo”改为“typr”,提交修改意见。

Subversion会提示李四在提交修改之前,

您应该首先将工作副本更新到最新版本。

李四执行更新命令,将工作副本更新为版本11。

此时,Subversion会将版本11的a.txt文件与。

合并李四修改的a.txt文件时,发现李四也修改了第五行。

颠覆不能判断是李四的改装(“Tpyr”)。

正确还是张三的修改(“类型”)正确,

因为都是在10版a.txt的基础上修改的。

这种情况被称为冲突,

. txt文件的图标将变成黄色三角形。

这个时候李四只能靠自己判断第三行应该修改为“Typpr”还是“Type”。

当李四确认修改后,右击a.txt文件,Tortoisesvn->;断然的

告诉Subversion冲突已经解决。

此时,执行Commit命令提交修改(生成修订版12)。

Subversion确保您对文件所做的所有更改都基于文件的最新版本。

8."8."。svn”目录

“会有。svn "目录下的每一层客户端工作副本。

Subversion使用这个目录进行管理。

不要手动修改其中的文件。

该目录存储工作副本的副本。

(副本的实际存储位置是目录F: \ Project 1 \。SVN \ text-base),

例如:F:\Project1是工作副本,

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

子目录ccc下还有一个d.txt文件。

的”。svn "目录在您最后一次执行更新或提交命令后,将文件的副本存储在当前目录中。

例如:f: \ Project 1 \中存储的a.txt和b.txt。SVN \文本基础。

是最近一次更新或提交命令后F:\project1下a.txt和b.txt的副本。

也就是说,您所做的所有更改都是基于存储在。svn”目录。

这种机制允许我们连接到网络,

将工作副本中的文件恢复到修改前的状态。

Subversion的Revert命令就是通过使用这种机制实现的。

例如,如果修改F:\project1\a.txt文件,

这时你改变了主意,想放弃修改档案。

你可以右击,TortoiseSVN-& gt;回复,

修改了F:\project1\a.txt文件

它将被替换为f: \ Project 1 \中的一个. txt文件的副本。SVN \文本基础。

以便将a.txt恢复到修改前的状态。

“会有。svn”目录下的每个子目录中的工作副本。

不仅仅是顶级目录有“.”。svn”目录。

因此,也有一种”。svn "目录下的F:\project1\ccc。

此目录存储f: \ Project 1 \ CCC \ d.txt的副本。

(d.txt的副本位于f: \ project1 \ CCC \。SVN \ text-base)。

也就是说,每一个”。svn "目录只存储同一级目录中"文件"的副本。

而不存储目录副本。的”。svn "目录包含了许多重要的内容。

所以当删除文件或目录时,

TortoiseSVN-& gt;删除,

不能用“删除”键删除文件或目录,尤其是对目录的删除。

9.混合版本

Subversion的工作副本被设计成包含不同版本的文件。

例如,F:\Project1是一个工作副本。

这个目录下有两个文件a.txt和b.txt。

执行更新命令,将工作副本更新到最新版本(修订版24)。

此时,a.txt和b.txt的版本都是24。

(其实单个文件是没有修订的。

修订是针对整个存储库的,

这里指的是存储在存储库版本24中的a.txt和b.txt。

但为方便起见,请注意采用此描述,下同)。

之后你同事修改了a.txt,提交了修改。

此时,存储库的版本变为25。

请注意,此时您没有再次执行更新。

所以你的工作副本版本仍然是24。

这时你修改了b.txt文件,提交了修改。

因为Revision25没有修改b.txt文件,

因此,您对b.txt文件的修改是基于b.txt文件的最新版本。

所以不会有冲突。

当您提交b.txt的修改时,会生成版本26。

这时,你会发现你的工作副本中的a.txt文件并不是Revision25中的a.txt文件。

也是Revision24的a.txt文件,你的b.txt文件是Revision26的b.txt文件。

也就是说,当您提交时,只有您在工作副本中提交的那些文件才是最新的版本。

其他未修改的文件不会更新到最新版本。

这将导致您的工作副本由不同的修订文件组成。

(版本24的a.txt文件和版本26的b.txt文件)。

我之前说过,在提交修改之前,你必须确保你是在最新版本的基础上修改文件的。

如果在这种混合版本的情况下,

如何知道当前工作副本中的文件是否是最新版本?

前面提到的“条目”中有一个名为“条目”的文件。svn”目录。

该文件记录当前工作副本中每个文件的修订。

因此当您提交时,Subversion将从文件中获取您提交的文件的修订版。

通过与Repository的最新版本进行比较,可以知道您修改的文件是否基于文件的最新版本。

10.文件锁定

如前所述,Subversion的版本控制模型是一种叫做复制-修改-合并的版本控制模型。

(复制-修改-合并)模型。

该模型在文本文件的版本控制中工作良好,

但是有些需要版本控制的文件不是文本文件。

比如图像文件,这种情况下这个模型无法正常工作。

因为文本文件可以合并,二进制文件不能合并。

所以Subversion从1.2支持一个叫锁-修改-解锁的方法。

(锁定-修改-解锁)版本控制模型。

这种模型被Windows下最常用的版本控制软件Visual Source Safe(VSS)所采用。

这种模式要求文件在被修改之前应该被锁定。

然后就可以修改了。此时,其他人将无法修改该文件。

修改后释放锁定,以便其他人可以锁定文件,然后修改它。

锁定文件的方法是:Tortoisesvn->;获得锁定...再次单击“确定”按钮,

此时,文件被锁定。

此时,如果其他人想要锁定文件,

Subversion会提示他文件已被他人锁定。

当您完成修改文件,然后右键单击,SVN提交...

提交更改,默认情况下,提交时文件将被解锁。

如果您仍想锁定文件,请在提交时弹出的对话框中选择“保持锁定”复选框。

11.文件的附加属性

在Subversion中,每个文件都有一个叫做附加属性的东西。

附加属性描述了该文件的一些特征。

Subversion预定义了一些额外的属性。

(这只意味着Subversion已经定义了一些附加属性的“名称”。

这并不意味着这些属性已经附加到文件中。

例如,默认情况下,文本文件最初不包含任何属性,

直到附加属性被人为地添加到文件中),

您可以向文件中添加自定义属性。

Subversion对待附加属性就像对待文件内容一样。

当修改文件的附加属性(添加、改变和删除附加属性)时,

即使文件的内容没有被修改,

您也可以提交文件,就像更改文件内容一样。

存储库还将生成一个新的修订版本,

所以从某种意义上来说,

Subversion不会将文件附加属性的修改与文件内容的修改区别对待。

文件的附加属性可以看作是一种特殊的文件内容。

Subversion预定义了几个附加属性,

这里只讨论“svn:needs-lock”属性。

因为和上面的一个文件锁定导致的问题有关。

对于其他属性,请参考Subversion附带的帮助文档。

考虑到这种情况,

张三和李四同时想修改a.jpg的一个图片文件。

张三先锁定文件,再修改。

与此同时,李四也开始修改文件。

但是李四忘了,非文本文件在修改的时候要先锁定。

张三首先完成了对文件的修改,于是张三将自己的修改提交给了服务器。

之后,李四也完成了修改。当他提交修订版时,

Subversion提示李四文件版本不是最新的。

在提交之前,A.jpg应该更新到最新版本。

因为图片文件不能合并,

这意味着张三和李四之间必须有一个人的修改。

应用“svn:needs-lock”属性可以避免这个问题。

当文件具有“svn:needs-lock”属性时,

当文件未锁定时,文件的图标为灰色。

指示该文件是只读文件(选中了该文件的Windows只读属性的复选框)。

这个灰色图标会提醒想修改文件的人。

您应该在修改文件之前锁定它。

锁定文件后,文件的只读属性将被删除。

一旦解除锁定,文件图标将再次变成灰色。

该文件将变为只读。

在这种情况下,李四会避免在文件未锁定时修改文件。

将“svn:needs-lock”添加到非文本文件中。

属性应该在文件第一次添加到存储库时设置,

当然,文件可以随时添加附加属性。

这样做是为了减少李四遇到问题的概率。

具体方法是:

首先,将a.jpg文件复制到工作副本。

然后右键单击该文件,

TortoiseSVN-& gt;添加,告诉Subversion将文件置于版本控制之下,

然后右键单击该文件并选择属性。

在弹出的属性对话框中选择Subversion页面。

在下拉框中选择“svn:needs-lock ”,

并在下面的文本框中填写“*”。

(其实这里填什么都无所谓,只要文件有“svn:needs-lock”这个附加属性就可以了),

然后点击Set按钮,附加属性“svn:needs-lock”将被设置。

然后执行Commit命令提交更改。

此时,当其他人执行更新时,

A.jpg将被添加到他们的工作副本中。

并且该文件的附加属性将与该文件一起获得。

你可以看到a.jpg的图标此时是灰色的。

该文件的Windows属性也是只读的。

12.回到以前的版本

因为Subversion将记录您对存储库所做的每一个修改,

因此,很容易获得存储库在之前某个时刻的状态。

例如,存储库的最新版本是56。

此时,我想看看版本24的存储库的状态。

您可以右键单击本地工作副本。

TortoiseSVN-& gt;更新到版本...,

然后输入您要回复的版本号,并点击“确定”按钮。

回到以前的版本,还有另一种情况,我想把存储库的

最新修订版的状态与先前修订版的状态完全相同。

上述方法不合适,

上述方法仅将本地工作副本恢复到其先前的状态。

服务器端存储库尚未返回到其先前的状态。

将存储库的最新版本状态恢复到以前版本状态的具体方法是:

执行更新命令,将工作副本更新为最新版本。

然后右键单击工作副本,

TortoiseSVN-& gt;显示日志,

弹出的日志消息窗口将显示存储库的所有修订。

选择最新版本,然后按住Shift键。

然后点击要回复的修订版+1。

(例如,存储库的最新版本是30。

您希望将存储库的状态恢复到版本16。

然后选择Revision30并按住Shift键。

选择版本17,

也就是说,选择17版和30版之间的所有版本。

然后右键单击选定的修订,

选择“从这些修订中还原更改”。

再次单击“是”按钮,工作副本的状态将恢复到目标版本。

请注意,此时只有工作副本恢复到目标版本。

之后,您应该使用Commit提交更改。

这样,存储库的最新状态与目标修订版的状态相同。

这两种恢复到以前版本的方式是完全不同的。

第一种方法是将整个工作副本恢复到修订版。

也就是说,通过这种方式,文件的副本存储在了”。工作副本中的“svn”目录与目标版本完全相同。

如果此时不修改文件,您将无法执行提交命令。

在第二种方式中,工作副本中的客户端

该副本存储在”。svn "目录总是最新版本的文件副本。

(这里我们假设在更新之后没有其他人修改过这个存储库)。

这种方式类似于手动将工作副本的文件状态更改为目标版本。

修改后提交修改。

13.查看和修改

有时我们会修改工作副本的许多文件。

这些文件位于不同的子目录中,因此我们可以右键单击工作副本的顶层目录。

TortoiseSVN-& gt;检查修改,

弹出的对话框会显示你修改的所有细节。

另一种情况是,我们的工作副本已经很久没有执行更新命令了。

我们希望看到工作副本中的哪些文件已被修改。

此时,您可以右键单击工作副本的顶层目录。

TortoiseSVN-& gt;检查修改,

单击弹出对话框中的“检查存储库”按钮后,

将显示在服务器端修改过的文件。

该方法的另一个目的是检查文件的锁定,

当你想锁定一个文件时,你想看看它是否被其他人锁定。

单击“检查存储库”按钮,显示服务器端存储库中所有锁定的文件。

如果你要锁定的文件不在里面,说明该文件目前没有被锁定。