Dec 17, 2008

SVN tutorial and tortoiseSVN

经测试,在windows下面建立的 respo 在linux下面可以直接使用。

简易教程


svn import localpath svnpath -m 'message'
svn checkout svnpath localpath
注意上面两个命令中,操作的是 localpath 和 svnpath 里面的内容,不包含两个 path 本身。
并且 checkout 之后 localpath 含有 .svn 信息,所以 localpath 最好含有 svn 管理的那个文件夹的目录,而不用它的上层目录。
checkout 如果不含有 localpath,则默认以 svnpath 的最后一个目录名为 localpath
假设
prjt - src
      - bin
     - other files
svn 只管理 src 目录
注意 localpath 最好以 src 结尾
import prjt/src svn/prjt      
checkout svn/prjt  prjt/src  
或者
import prjt/src svn/prjt/src
checkout svn/prjt/src  prjt/src
checkout svn/prjt/src  (在目录  prjt 下执行)
都是可以的

tortoiseSVN都带有 localpath 的,要注意

trunk 的作用,参见上面的教程


Summation of useful commands:
svnadmin create --fs-type fsfs /home/user/svn
svn ls file:///home/user/svn
svn log file:///home/user/svn

svn import /path/to/project/ file:///home/user/svn/project/trunk -m 'Initial import'


在某一目录下
1. svn checkout file:///home/user/svn/project
则在该目录下,有 project 目录,project 下有 trunk 目录
也可以采用
2. svn checkout file:///home/user/svn/ project
效果相同,请注意!!!!


svn info 查看信息
svn status 查看有什么改变

记住以 svn 开头的命令都会被 svn status 记录,所以在project 目录下使用 svn 开头的命令
svn rm somefile
等同于
rm somefile
svn rm somefile

状态标号
M 修改过
A 新增文件
? 未知文件(用 svn add 加入)
! conflict (比如用 rm 删去的文件)



修改后
svn commit -m 'some message'


另 tortoiseSVN 状态
http://tortoisesvn.net/docs/nightly/TortoiseSVN_hr/tsvn-dug-wcstatus.html

 tortoiseSVN 设置 ignore 文件
setting -> general -> global ignore pattern
别忘记*

放弃修改

取消对代码的修改分为两种情况。

第一种情况:改动没有被提交(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没有方法找回未提交的修改。

第二种情况:改动已经被提交(commit)。这种情况下,用svn merge命令来进行回滚。
回滚的操作过程如下:
1). 保证我们拿到的是最新代码:
svn update
假设最新版本号是28。
2). 然后找出要回滚的确切版本号:
svn log [something]
假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目
如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]
3). 回滚到版本号25:
svn merge -r 28:25 something
为了保险起见,再次确认回滚的结果:
svn diff [something]
发现正确无误,提交。
4). 提交回滚:
svn commit -m "Revert revision from r28 to r25,because of ..."
提交后版本变成了29。
将以上操作总结为三条如下:
a. svn update,svn log,找到最新版本(latest revision)
b. 找到自己想要回滚的版本号(rollbak revision)
c. 用svn merge来回滚: svn merge -r : something

参见 SVN使用教程

0 comments: