svn安装和使用

一、SVN

1、什么是svn

svn:全称Subversion,是代码版本管理软件,管理着随时间改变的数据。这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。 许多人会把版本控制系統想像成某种 “时光机器”。

SVN它也是安装在服务器端的一个软件,用来管理我们每次提交的代码。没提交一次代码,svn就会记住:该次提交的代码是什么、提交人是谁、这个代码的提交较上次的代码有什么变化。

2、同类型产品

vss:visual source safe

cvs:Concurrent Versions system

github: 分布式代码控制管理软件,林纳斯开发的(Linux)

3、使用svn开发的作用

①、可以记录一个文件的多个版本,并且能回到之前的某个版本

②、可以对相同的文件进行“融合/整合”,而不是覆盖文件。

③ 公司领导可以通过svn查看每个人的工作情况

二、SVN的安装

1、服务器端安装(Subversion for windows)

2、客户端安装(TortoiseSVN)

根据自己电脑的位数(32位或者64位)来选择安装。

查看自己电脑位数的方法:右键我的电脑属性

双击一个版本,一路next,最后点击finish完成安装。

安装完成:在任何文件夹的空白处包括桌面,右键会看到如下选项,表示安装成功。

安装完成,如果看不到右键选项,重启电脑。

三、使用SVN服务

1、创建多个仓库(存储代码文件)

1、先在E:/svn/app/下新建三个仓库(放项目代码的)

创建仓库:

用命令:svnadmin create 仓库地址

svnadmin create E:/svn/app/shop

如果提示

错误。解决办法:类似于mysql和httpd。

方法一:添加svnadmin.exe所在目录到系统的环境变量。

右键我的电脑属性高级环境变量Path.

编辑Path,添加svnadmin.exe所在目录到Path中。

方法二:切换到svnadmin.exe所在目录,再执行该命令即可。

切换方法:

到此,仓库创建成功。

把其他两个仓库也创建好:(针对个别电脑不能自动将命令目录放到环境变量中的情况)

到此,三个仓库都创建好了。

2、启动仓库服务

用命令:svnserve –d –r 仓库地址

svnserve –d –r E:/svn/app/shop

服务启动完成,这个dos窗口不能关闭,关闭表示svn仓库服务关闭。这是一个挂起服务。

3、与仓库取得联系

1、新建了三个文件夹,分别表示三个程序员的电脑

2、这三个程序员,要和svn仓库联系

在每个程序员的“电脑”上的工作目录中,右键SVN Checkout…

弹出如下对话框:

点击“ok”。

然后看一下yasuo的文件夹(电脑):

查看隐藏文件的方法:

相同的办法,另外两个程序员,也和我们的仓库取得联系。

4、给svn仓库提交第一个程序文件

第一步:右键文件->SVN->add

第二步:右键->SVN Commit…

点击“ok”

出现“认证失败”是因为,我们没有权限提交。

那么现阶段,先为了提交成功,先打开“匿名账号”。

打开“匿名账号”的方法:

找到该项目的仓库配置文件:

打开svnserve.conf文件,进行如下配置:

注意:19行前面不要有空格。

修改完配置文件,无需重启仓库服务。

再次提交:

4.1文件颜色标志

① 蓝色加号:本地的.svn对该文件有形成管理(远程仓库 还没有该文件记录),该文件已经执行add操作

② 绿色对号:本地文件、.svn管理的版本文件、远程仓库文件 三者内容完全一致

③ 红色叹号:本地文件  与  .svn和仓库文件 不一致(用户自己修改了该已经提交过的文件)

④ 黄色叹号:表示该文件正处于冲突状态

⑤ 蓝色问号:新建的一个文件,本地.svn 和 远程仓库 对该文件都没有记录

4.2在仓库内部查看已经提交的文件信息(看一下,了解一下)

查看的结果:

这里就是了解一下,能看到我们提交的东西就可以了。

4.3 ruiwen和jie要到仓库服务器中将已有的文件取得

update操作过后:

jie也是同样的步骤。

到此,三个程序员都有这个文件了。从现在开始,他们就可以一起开发了。

5、svn常见操作

checkout  ->第一次和仓库取得联

update->后续更新

commit->提交

6、目录和文件的提交

6.1一次性提交多个文件

一次性提交多个文件,无需add,只需直接SVN Commit…。svn会将没有执行过add操作的文件找出来。

6.2提交文件夹

在yasuo的工作目录中,新建了Controller的文件夹,在Controller文件夹下新建了两个控制器User和Index控制。

在Controller文件夹下,右键,显示如下情况:

发现没有add和commit,也就无法提交,原因是他们的父级目录还没有提交。

先提交他们的父级目录,也就是Controller文件夹。当然了,提交Controller文件夹的时候,自动会关联上他里面的文件。

选择上这些文件,提交即可。

7、同时运行多个svn仓库服务

错误的同时运行多个svn仓库服务的方式:

在打开一个dos窗口,在执行svnserve命令,开启book和car的服务。

svnserve –d –r e:/svn/app/book

svnserve –d –r e:/svn/app/car

svnserve –d –r e:/svn/app/shop

如果这样开启三个服务是不行的,这样的话,我们在检出(checkout)的时候,localhost指向不明确了。

正确的办法:

开启一个总的服务:

svnserve –d –r E:/svn/app

到这里,三个仓库的服务都开启了。

实验:与book仓库取得联系(检出checkout)。

新模拟了两个程序员的电脑(Xishi和Diaochan),在Diaochan的工作目录下,右键Checkout…

注意:此时,localhost指向的是E:/svn/app目录,所以,我们在想检出book项目的代码的时候,要加一层book目录。

7.1已有用户更换svn主机名地址

当svn服务主机地址改变后,我们就要相应的改变主机地址。改变的办法:

看到上图,表示主机更换成功。

8、同一个文件的不同版本切换

在yasuo的工作目录中,新建了一个banben.txt的文件,第一次写了11111并提交;第二次加入2222再次提交;第三次加入33333再次提交。到此,banben.txt这个文件有三个版本。

如何来查看它有几个版本呢?

看到的结果:

如何切换到之前的某个版本?

回到之前的版本,我们一般是查看为主,当然有时候也会修改。

如果回到以前的版本,并且修改了文件,并且还要提交,会出现“过期”错误。

原因是,svn仓库服务,如果本地的文件版本 低于 仓库服务器的版本,则不允许直接提交。

四、解决冲突(重点)

在多人开发同一个文件的时候,很多时候会出现,两个程序员的代码在同一处(行)或者不同处(行)不同的情况。这个时候在提交代码的时候就会提示有冲突。但是冲突的根本原因是客户端的版本低于服务端的版本。

1、冲突的具体形式

1.1大家修改的代码不在同一处(行)

此种情况,一般来说没什么毛病,比较好处理,svn一般会帮我们将文件融合到一起。

起始版本是11号(yasuo、jie、svn服务器的该文件版本都是11号):

jie先将他的工作目录下的该文件修改了。将一句话删除了:

修改之后要提交

jie提交后,jie的本地文件版本和svn服务器端版本都变为了12号版本。

yasuo开始修改它的工作目录下的代码:

修改完毕,提交

yasuo此时遇到文件过时的问题。原因是他的本地文件版本是11号,而jie已经将服务器端的版本变更为12号了。此时需要更新他的本地文件也为12号才能提交。

然后再次提交:提交成功。

jie在update一下自己的代码即可。

1.2大家修改的代码在同一处(行)

起始文件:

yasuo先在333333这行修改,然后提交。

jie在3333的位置也进行修改,然后得先更新,在提交,上面已经说过原因了。

jie在更新后,出现了下面三个文件:

这几个文件是辅助文件,帮助我们来解决冲突的。这三个文件都可以用记事本打开查看。

对比这三个文件,得出一个最终的版本:

然后进行提交即可。

小贴士:在实际开发中,有些时候,代码的冲突比较大,这个时候最好是和其他程序员进行沟通,共同解决冲突。

五、账号和权限

1、先关闭“匿名”账号

2、使得设置账号和配置权限的文件生效

3、设置账号

在生效的passwd文件中,设置用户名和密码。

4、给账号设置权限

4.1给具体用户设置权限

① 开启唯一仓库服务  svnserve.exe -d -r d:/svn/app/shop

[/]

用户名 = 具体操作权限

② 开启多个仓库服务  svnserve.exe -d -r d:/svn/app

[shop:/]    //或者 [book:/]  [car:/]

用户名 = 具体操作权限

权限有两种:读(能update,能从仓库update代码)和写(能提交代码commit)。读用r表示,写用w表示。

现在,给jie和yasuo权限:

亚索再次提交:

这里不要记住用户名和密码的原因是:因为jie和yasuo本来是两个人,也就意味着是两台电脑。而我们是在一台电脑上模拟操作的,yasuo记住用户名和密码,那么jie在提交的时候其实用的也是yasuo的用户名和密码。

如果不小心记住了用户名和密码怎么办?

3.2给一个组别设置权限

有些时候,我们公司在开发一个项目的时候,往往会请一些公司以外的人(外包)来做一些专业性的东西。比如,我们要做一个视频网站。播放器找另一家的公司的人来做,这个时候,就需要给其他公司的人设置权限。

办法:

先给这些人设置账号密码

给这些人分成一个组,并给权限

给组设置权限的时候,组名前要加“@”符合。

3.3开启只操作某个目录权限

还是上面的例子,最好的解决办法是把外部人员的可操作目录单独设置,比如开发播放器的三个人,我们让他们只有操作shipin目录的权限。

六、设置开机启动svn仓库服务

添加svn仓库服务语法:

sc create 服务名 binPath= “可执行文件路径 –r 仓库地址 –service” start= auto

sc create svnd binPath= “e:/svn/server/bin/svnserve.exe -r e:/svn/app –service” start= auto

注意语法中的空格

在电脑的服务中查看

删除服务的命令:

sc delete 服务名

sc delete svnd

也可以对创建和删除svn服务的命令生成一个批处理文件。

生成的办法就是将命令保存到一个记事本中,然后讲记事本的后缀改为bat即可。

七、svn使用细节

①、提交、更新代码。

②、领导查看每个员工的工作情况。

领导可以通过show log来查看每个员工的工作情况

八、真实环境使用svn说明

解决冲突补充:

jie开发login.php和register.php

yasuo开发login.php和index.php

作者:peng_js

链接:http://www.jianshu.com/p/dff9c62f1f3f

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    原文作者:上善若水_900e
    原文地址: https://www.jianshu.com/p/63e2f9a6ad33
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞