一、 SVN 使用
SVN是CVS的下一个版本,主要用来进行版本控制,可以对程序代码,音频,视频以及图像文件等,做版本控制。
目录以及文件是Subversion中可以记录版本的对象。其主要工作原理如下图:
_ _ _ _ _ _ _ _ _ _
/ /
| |
| 项目仓库 |
| |
/_ _ _ _ _ _ _ _ _ _/
/ |
/ check in |
check out / |
_ _ _ _ _ _ /_ _ _|_ _ _ _ _ _ _
/ / / /
| | | |
| 工作拷贝 | | 工作拷贝 |
| | | |
/_ _ _ _ _ _ _ _/ /_ _ _ _ _ _ _ _/
分支,主干,合并,标签
创建一个分支或者标签时,采用一种"延迟拷贝"的技术,即只创建指向同一版本的链接,当其中某个文件有所改动时,再去复制那个文件或者目录。
一般地来讲,分支是用来做准备发布的,而不是并行开发。
1、创建一个项目仓库
svnadmin create /home/huzza/test_svn
ls -l /home/hua/test_svn
2、import初始文件到项目仓库中
svn import -m source_file_path URL
本例 URL:file:///home/huzza/test_svn/sesame/trunk
file:// ------> 告诉svn是本地目录
3、checkout文件到本地目录
svn checkout(co) file:///home/huzza/test_svn/sesame/trunk sesame
4、检查文件状态或者日至
svn status [文件/目录]
svn log [文件/目录]
svn log -r6:8 [文件/目录] 查看版本6到版本8之间的日志
5、文件/目录比较(工作拷贝与项目创库中的比较)
svn diff [文件/目录] 或者 svn diff --rHEAD [文件/目录] --rHEAD:表示最新版本
6、更新本地工作拷贝,提交工作修改
svn update(up) [文件/目录] svn checkin(in) -m"comments" [文件/目录]
update时的一些文件标志:
U ------ 表示文件被更新
G ------ 表示项目创库中的文件和本地工作拷贝的文件合并到了一起
C ------ 表示合并时,有冲突产生
A ------ 新加入了一个文件
D ------ 删除了一个文件
? ------ 表示该文件或者目录没有被svn管理
M ------ 该文件被修改
7、冲突。当svn update时,如果存在某个文件存在冲突,打开冲突的文件,<<<<<<<< 和 >>>>>>>> 表明了冲突发生的地方。
当冲突发生时,如果想使用项目仓库中的版本,而放弃本地拷贝的修改,可以使用以下命令:
a、svn revert [冲突的文件/目录]
b、svn update [冲突的文件/目录]
(svn resolved [文件/目录] && svn updata [文件/目录],似乎也是ok的,需要confirm一下)
如果想保留本地工作拷贝的修改,而放弃项目仓库中版本的修改,可以如下:
a、cp 文件/目录.mine 文件/目录
b、svn resolved 文件/目录
c、svn ci -m "use my version please" 文件/目录
(在上面的三个步骤中,似乎不用做步骤a也可以达到目的)
8、使svn项目仓库联网
启动svn服务器:svnserve --daemon --root /home/huzza/test_svn
列服务器资源:svn list svn://192.168.0.4/sesame/trunk
出来后面的URL不同,其他操作的各部分均相同
svn+ssh 访问:svn list svn+ssh://192.168.0.4/sesame/trunk (需要在服务器上支持ssh访问)
9、得到特定版本的工作拷贝
svn checkout -rVersionNum list svn://192.168.0.4/sesame/trunk butterfly
svn info butterfly (查看当前版本拷贝的状态)
10、拷贝/移动文件
svn copy filename newfile
svn move oldfile newfile
svn ci -m "add or move some files" [修改文件所在的目录] (这里确保服务器上也作跟本地拷贝相同的动作)
11、版本的符号
HEAD --------- 项目仓库中的最新版本
BASE --------- 工作拷贝的基准版本(也就是checkout出来时的版本)
COMMITTED ---- 最后一次checkin的版本
PREV --------- COMMITTED之前的一个版本
12、查找版本之间的差异
svn diff -r2:4 [文件/目录]
svn diff > diffname.patch (生成patch文件)
使用patch文件: patch -p0 -i diffname.patch
13、删除后一个版本对前一个版本的修改
svn merge -r27:26 [文件/目录] && svn ci -m "undo the work of version 27"
撤销版本27所做的修改
14、创建分支/标签
svn mkdir -m "Create branches" svn://192.168.0.4/sesame/branches
svn copy -m "Create release branches for version 1.0" svn://192.168.0.4/sesame/trunk /
svn://192.168.0.4/sesame/branches/release-1.0
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1751561
二.安装SVN (Debian)
#apt-get install subversion-tools
2.建立仓库
#svnadmin create /opt/test_repos 简单吧!!!
3.导入项目(其实SVN没有项目这个概念)
#mkdir myproject
#cd myproject
#touch 1.c 2.c 3.c 4.c README Makefile
#svn import ../myproject file:///opt/test_repos
4.导出项目
#cd /tmp
#svn co file:///opt/test_repos/myproject myproject[1|2|3…]
说明: file:/// 说明引用的仓库位于本地磁盘,后一个myproject作为可选项的,比如check out 多个版本的时候,我们可以引用1,2,3等来标记。
5.在导出的项目中,添加/删除目录或者文件
#svn mkdir newdir
当然你也可以 先mkdir newdir 再使用 svn add newdir进行添加
#touch newfile
#svn add newfile
#svn del olddir/oldfile 注意:这里对文件和为提交的目录的删除会马上执行。
#svn mv old[dir/file] new[dir/file] 移动,重命名
6.提交修改
#svn update 在提交前请update一下,可以看见对文件的一些状态,看见其他人的一些改变
#svn ci [filename/dir]
7.查看修改以及消除冲突
#svn diff
发生冲突后,手动修改 然后再
#svn resolved
8.回溯
几个预备的知识
1.关于修订版本
修订版本就是提交版本的一个快照,通过修订版本我们能够返回到原始的版本
2.修订版本的关键字
HEAD,COMMITTED,BASE,PREV
HEAD 版本库中最新的版本
BASE
COMMITTED
#svn update -r HEAD/COMMITTED/PREV/BASE [filename]
#svn update -r 1
这里的1代表修订版版本号 可以用svn log 进行查看
#svn co -r {时间点或者时间段}
三、SVN 实践
首先我们得建立一个SVN的项目,一般人都认为建立项目就只需要一个文件,在我第一次使用SVN之前都有这样的看法,SVN建立项目需要建立文件夹
建立项目命令:svnadmin create project_name project_name 为你的project名字,可以任意取。
建立完毕后,project_name是一个文件夹,进入文件夹,可以看到一个conf的文件夹。进入文件夹可以看到2个文件(如果没有passwd文 件,可以用vi创建),编辑 svnserve.conf 把anon-access = read ,auth_access = write
还有password-db = passwd 的注释去掉,还有[general]的注释也要去掉。
vi passwd文件,如果是新文件,则输入:
[user]
your_name = your_password
这里设置的your_name是你的用户名,your_password是你的密码,这个是访问SVN必要的通行证。
好了,现在终于把准备功夫做完了,下面可以正是使用了。
首先找到你的项目源代码文件夹,使用下面命令:
cd your project
in your project dircetory
use:svn co /home/project_name --username = your_name --password=your_password
好了,现在你可以在客户机上使用以下命令获得你想要的项目源代码文件
svn co svn://home/project_name --username=your_name --password = your_password
把增加的svn文件添加入svn库:
svn add /home/your_project/*.* --username=your_name --password = your_password
提交文件:
svn commit /home/your_project/*.* --username=your_name --password=your_password
更新文件:svn update /home/your_project/*.* --username=your_name --password=your_password
当然你可以编辑一个脚本文件来一次完成所有的操作:
vi svnupdate.sh
#!/bin/sh
svn add /home/your_project/*.* --username=your_name --password = your_password
svn commit /home/your_project/*.* --username=your_name --password=your_password
svn update /home/your_project/*.* --username=your_name --password=your_password
chmod +x svnupdate.sh
四、SVN快速入门
注意 使用用户 (sysmen) :
#指定新版本
vim ~.bashrc #添加了
alias svn="/usr/local/subversion/
alias svnadmin="/usr/local/subversion/bin/svnadmin"
alias svnserve="/usr/local/subversion/bin/svnserve"
#最简单 svn 服务器搭建
cd /home/sysman/src/svn/
svnadmin create test
svnserve -d -r /home/sysman/src/svn/test/
#最简单配置
#vim svnserve.conf
[general]
password-db = passwd
realm = test
anon-access = read
auth-access = write
#查看
cd /home/sysman/src/svn/testsrc
svn list svn:// 127.0.0.1/test
#迁出
cd /home/sysman/src/svn/testsrc
svn checkout svn:// 127.0.0.1/test
#迁入
cd test
echo "google - baidu " > baidu
svn add baidu svn:// 127.0.0.1/test
svn commit -m 'add ok'
svn list svn:// 127.0.0.1/test
# baidu
# tt
#详细参考 :
http://www.subversion.org.cn/svnbook/
在文档中有关有意思的介绍 (svnsync):
http://www.subversion.org.cn/svnbook/1.4/svn.ref.svnsync.html
其他说明 :
1.帮助
svn help
或
svn help add
2.一般操作
更新你的工作拷贝
svn update
做出修改
svn add
svn delete
svn copy
svn move
检验修改
svn status
svn diff
可能会取消一些修改
svn revert
解决冲突(合并别人的修改)
svn update
svn resolved
提交你的修改
svn commit