有时候在家里修改公司的项目,每次copy发现很麻烦,就想到了用代码管理工具。一开始我选择的是github,是因为我经常逛这个网站,轮到我自己管理一个项目时候发现,github上面的项目都必须的是开源的(当然花钱的除外哈),由于公司的项目没有办法,找不到其它的替代品。突然想到了公司本身就有个svn服务器,只不过我很少用(之所以很少用是因为我以前一直使用git来管理项目,习惯了),那就现在开始使用吧。
svn也零零总总的用了几次,不过现在看来,以前的都是花架子,根本没有搞懂原理,自从使用了git之后,搭建了一个完整的客户--服务器模式时候,才渐渐搞明白版本管理工具到底是怎么回事。
最开始,项目代码我已经开发了一些,所以我一直希望可以在本地初始化本地库。发现svn跟git还是有点区别的,svn简单许多,步骤如下:
svn checkout svn://192.168.1.1/pro/domain
这里把你的项目代码复制过来
svn status
svn add * //删除文件就用svn delete xx
svn commit -m 'init project'
svn update
平时普通的提交代码步骤:
svn up //跟新本地代码与服务器一致,防止他人修改代码
svn status
svn add *.java
svn commit -m 'information'
svn update
这里说下svn update命令:
svn update -r m path //更新到某个版本例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先 update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
svn代码库回滚问题:
a.改动已经被提交(commit)回滚的操作过程如下:
1、保证我们拿到的是最新代码:
svn update
假设最新版本号是28
2、然后找出要回滚的确切版本号:
svn log [something] //这里something可以省略
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
3、回滚到版本号25:
svn merge -r 28:25 something //这里的something不可以省略 (可以用'./'代替)
为了保险起见,再次确认回滚的结果:
svn diff [something]
发现正确无误,提交。
4、提交回滚:
svn commit -m "Revert revision from r28 to r25,because of …"
svn up
提交后版本变成了29。
b.改动没有被提交(commit)这种情况下,使用svn revert就能取消之前的修改。
svn revert用法如下:
# svn revert [-R] something
其中something可以是(目录或文件的)相对路径也可以是绝对路径。
当something为单个文件时,直接svn revert something就行了;当something为目录时,需要加上参数-R(Recursive,递归),否则只会将something这个目录的改动。
在这种情况下也可以使用svn update命令来取消对之前的修改,但不建议使用。因为svn update会去连接仓库服务器,耗费时间。
注意:svn revert本身有固有的危险,因为它的目的是放弃未提交的修改。一旦你选择了恢复,Subversion没有方法找回未提交的修改。