一、SVN简介
Subversion(SVN)是一个开源的版本控制系統,也就是说Subversion管理着随时间改变的数据。 这些数据放置在一个中央资料档案库(repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样你就可以把档案恢复到旧的版本,或是浏览文件的变动历史。SVN 的一些概念:
- Repository(源代码库):源代码统一存放的地方。
- Checkout(提取):当你手上没有源代码的时候,你需要从repository checkout一份。
- Commit(提交):当你已经修改了代码,你就需要Commit到Repository。
- Update (更新):当你已经Checkout了一份源代码,Update一下你就可以和Repository上的源代码同步,你手上的代码就会有最新的变更。
如果多个程序员同时修改了同一个文件,SVN可以合并这些改动,实际上SVN管理源代码是以行为单位的,就是说程序员只要不是修改了同一行程序,SVN都会自动合并修改。如果是同一行,SVN会提示文件冲突Conflict,需要手动确认。
SVN主要功能有:代码同步、更新、执行变更、复查变化、修复错误、解决冲突和提交更改。区分linux端和windows端,linux以命令为主,而windows端以图形操作为主,这里只给出了linux的操作,windows操作请自行学习。
二、SVN常用操作命令
- [root@Linux ~]# svn --version
查看当前svn软件版本。
- [root@Linux ~]# svn co svn://[IP地址]/[代码目录名]
代码同步,将服务器代码同步到本地,本地存有备份代码。
- [root@Linux ~]# svn info
查看当前同步的代码在服务器上的信息,包括代码同步地址、代码当前版本、最近修改用户等,命令必须在同步的目录下使用。
- [root@Linux ~]# svn update 或 svn update -r [版本号] [路径]
svn update更新当前路径下的全部代码,svn update -r更新指定版本号指定路径下的代码。
- [root@Linux ~]# svn status
检查本地文件中是否存在未加入服务器中的新增代码,如果存在会以“?”表示。
- [root@Linux ~]# svn add [路径/文件名]
将本地文件上传到服务器代码仓库中,但并没有同步更新到其他备份。
- [root@Linux ~]# svn commit -m “[代码更新说明文字]”
将之前add上传到服务器的代码添加到版本控制中,并提交代码更新说明,提交后服务器代码版本号会自动加1。
- [root@Linux ~]# svn diff
查看当前目录下是否存在和服务器版本不一致的文件,如果存在给出对比结果。例如:
上图中给出了chip_params.vh文件在本地和服务器的不同,revision是版本号,working copy是本地副本,同时给出了具体不同的位置。当本地文件和服务器冲突时,使用svn update命令可能会导致系统提示代码冲突,并让你选择如何处理冲突,例如:
图中给出了7种解决冲突的方法,p:忽略;df:比较区别;e:编辑文件;m:合并;mc:本地文件为主;tc:其他端文件为主;s:显示所有操作。
- [root@Linux ~]# svn delete [路径/文件名]
删除上传的文件或目录,该操作会将文件或目录删除,使用commit确认代码并进入到SVN版本控制中。
- [root@Linux ~]# svn revert [路径/文件名]或svn revert -R [路径]
撤销上传的文件或目录修改,该操作会将文件或目录恢复到最原始的状态,代码必须未进版本控制,如果commit后则无法再用revert恢复修改。
- [root@Linux ~]# svn merge -r [版本号1] [版本号2]
merge操作是相对于branch而存在的,当代码研发存在多个分支时,多个分支可以并行前进,而在一段时间后,最终确定的分支可以合并到主版本号中。当没有branch时,merge操作也会回退版本,上述命令意思是撤销版本号2,回到版本号1。