一、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