使用SVN作为代码管理工具共需要安装两种软件,一种是SVN服务器,本例中使用VisualSVN,一种是SVN客户端,本例中使用TortoiseSVN。
SVN服务器下载地址:VisualSVN Server
SVN客户端下载地址:TortoiseSVN
SVN客户端中文包下载地址(在下载SVN客户端的页面下面):Chinese, simplified
如图为SVN服务器下载位置
如图为TortoiseSVN下载位置
如图为SVN客户端中文包下载位置
SVN作为一个代码管理工具,最好将它安装在一个公共的地方以供其他人可以方便的访问。
作为演示,在H盘根目录下temp文件夹中建了一个SVN文件夹用来放置SVN服务器相关的文件。
新建一个SVN文件夹
在SVN文件夹下新建BACKUP、REPOSITORIES、SERVER三个文件夹
选择标准版本即可
注意这里将路径改为之前创建的三个文件夹
安装运行成功
注意:如果要使用PhpStorm等IDE进行开发并且要用使用到SVN的,请选择安装command line clinet tools,否则将不能使用PhpStorm等内置的svn管理工具。
一路next即可,如需调整软件安装目录,请自行调整,推荐默认路径。
重要:注意勾选此处的Configure ToroiseSVN to use the language。这样就不用安装完再去设置ToroiseSVN的语言项了。
安装完毕之后右键可以文件夹空白处可以看到ToroiseSVN的工具条都已经变成中文。
默认安装的SVN服务器新建仓库时使用的URL地址将会是与本机计算机名相关的一个地址,将其修改为内网IP地址能够方便我们使用。
在VisualSVN Server(Local)上右击,选择properties
选择Network选项卡,修改Server name Server port两项
打开VisualSVN软件并在Repositories上右击Create New Repositories
选择第一个选项
输入仓库名
选择空仓库
选择所有用户具备读写访问权限
注意:复制或记住这个路径,客户端检出就是使用的该路径,由于当前还未配置仓库的用户等,目前还无法使用该仓库
如果未能在新建仓库时复制,也可以在此处复制(右击仓库名)
此时,一个SVN仓库已经新建完成,但是现在由于没有给这个仓库添加用户,所以还不能够对这个仓库进行操作,我们需要新建用户、用户组来给这个仓库添加用户。
在Groups选项上右击新建Group
输入rxkj点击确定
重要:将新添加的用户添加到用户组,这样给仓库添加用户时就无需每次勾选用户,只需要选择用户组即可
右击之前新建好的仓库,选择properties
点击Add
选择groups
此时,就可以使用该用户组下的用户去操作该仓库了。
在SVN服务器中建立好仓库与用户,并为仓库分配好用户之后,我们就能使用TortoiseSVN去检出使用这个仓库了。
复制之前建立的仓库地址
在你本地文件夹中右击,选择SVN检出
此处的DESKTOP-BIUS538,请注意需要替换为安装SVN服务器的IP地址,并要把服务器上的防火墙关闭,或者开放SVN端口
注意下面的检出至目录,存放到你要放置项目的文件夹中,项目文件夹的名字与仓库名字相同
输入之前分配给该仓库的用户的用户名和密码
出现项目的文件夹和检出完成对话框,即代表检出已经成功,如果没有出现文件夹上的绿勾,请重启电脑。绿勾代表项目中修改的文件都已签入到服务器
svn仓库的代码检出并不一定是要在仓库的根目录检出代码。由于项目中可能存在文档的其他资源,所以仓库的根目录并不一定是项目的根目录。此时,如果使用phpstorm的工具进行开发时,会遇到如果项目代码不是svn的根目录,项目代码无法在工具中提交的问题。
现在本地新建项目文件夹,然后分别建立代码根目录和文档根目录等其他目录。然后将代码的目录和其他目录分别导出,这样就可以在IDE中使用版本控制工具进行代码的管理了。这样做的好处是,如果一个仓库中既有前端项目,又有后端项目,那么他们可以分开导出而不受对方的影响。麻烦的地方在于,一个仓库里的东西需要分开检出。分开检出的项目又需要单独上传。
在项目中新增一个readme.txt文件,并保存。.svn隐藏文件夹表示这是一个svn项目的意思,不要去动这个文件夹。
回到项目所在的目录中,右击项目文件夹,选择svn提交。
出现提交完成对话框即代表提交已完成。
在项目的文件夹上右击,选择SVN更新
假设用户A修改了readme.txt文件,并将其提交到了服务器仓库中。
用户B在没有获取到用户A最新修改的提交的readme文件前也修改了readme.txt文件
在用户B提交时,会显示提交失败
确定后选择更新
右击出现冲突的文件,选择编辑冲突
在出现有冲突的行上右击,选择使用他们的行,或者使用我的行解决冲突
在所有冲突行都解决后,标记已解决并保存
此时文件的冲突标记已不在,显示为已修改的标记。
再次查看该文件,可以看到其中有些为用户A的修改,有些为用户B的修改。
提交更新。
此时用户A获取更新,得到的就是用户B解决了与用户A冲突后的文件。
至此,冲突解决完毕。
如果VisualSVN一开始配置的是默认端口(443),并且客户端已经从这个端口上检出了代码。而后又因为其他原因修改了VisualSVN的端口,或者路径,需要让客户端重新定位。
在项目上右击,选择重新定位,输入新的地址
至此,SVN客户端又能够重新从新的VisualSVN地址检出代码。
在使用svn版本管理项目时,有的时候不用把项目中的所有文件添加到项目中,而每次都手动的去忽略文件会很麻烦,svn在项目的属性配置中有一个ignore属性可以配置全局忽略。
在项目上右击,找到属性
点击新建,其他
添加完成后点击确定
此后,再使用SVN提交时就不会出现被忽略的目录了
至此,文件忽略说明完毕。
分支与标记功能,其中tag代表项目的某个里程碑副本,比如1.0版本发布。而branch表示用于增加新的功能而不影响主分支。这两个东西,本质上其实就是一份当前项目的拷贝,当拷贝出去之后,分支或者标记上的项目就与主分支上的独立了。但也不是完全独立,在服务器上分支会保存主分支文件的引用。
注意事项:
要想使用分支与标记,最好在项目仓库建立之初就选择建立那些用于分支与标记的文件夹。否则后期再建,会有问题。
在你要建立拷贝的文件夹上右击,选择分支/标记
在至路径中找到branches文件夹,并确定。
增加branches后面的路径名字
注意不要切换工作副本到新分支,确定即可。
选中branches文件夹,选择svn更新。
新建一个1.txt文件并提交到分支上。
在主分支上单击合并,选择合并一个版本范围
选择要合并的分支
下一步并确定合并。
**可以看到1.txt已经被添加进来,提交更改即可。**至此,合并分支完毕。
注意,tag其实也是分支的一种,只不过我们习惯把tag当做某个里程碑版本的分支,这样的分支一般只是用来记录某些版本发布的时刻,某些版本的备份。不能将其当做分支使用。
svn中的branch与tag非常灵活,这里只是简单说明,具体的使用请查找相关资料。