SVN 使用入门

 

一、 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/

bin/svn"
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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值