分类: 项目管理
2007-11-02 09:41:07
ubuntu-7.04 和 windows xp上使用svn
在线手册:
1)ubuntu-7.04
安装svn
sudo apt-get install subversion
sudo apt-get install libapache2-svn
mkdir -p /home/opt/svn/
/home/opt/svn 用来存放多个代码仓库
svnadmin create --fs-type=fsfs mysource
--fs-type 指定仓库类型,可以为fsfs或bdb 如果没有指定默认创建为fsfs类型
mysource 为仓库名称
修改 svnserve.conf 文件
vim /home/opt/svn/mysource/conf/svnserve.conf
---------------------------
# anon-access = read
# auth-access = write
-->
anon-access = read
auth-access = write
# password-db = passwd
->
password-db = ../../passwd
---------------------------
cp /home/opt/svn/mysource/conf/passwd /home/opt/svn
以上操作的目的是为所有的版本库共享同一个passwd文件
修改 passwd 文件
vim /home/opt/svn/passwd
guest 为用户名 000000 为密码
----------------------------
[users]
# harry = harryssecret
# sally = sallyssecret
guest = 000000
----------------------------
配置可参考:http://blog.donews.com/quickmouse/archive/2007/09/25/1213346.aspx
linux的命令行操作
要使用svn协议访问仓库必须启动svn服务
svnserve -d 或者
svnserve -d -r /home/opt/svn
如果执行的是 svnserve -d 命令,访问的时候要使用全路径
svn import
svn import /scratchbox/mysource svn://192.168.2.56/home/opt/svn/mysource
cd ~
svn co mysource
工作拷贝存放在
~/mysource
如果执行的是svnserve -d -r /home/opt/svn 代码仓使用的就是相对路径
svn import
svn import svn://192.168.2.56/mysource
如果需要密码,命令如下:
svn co svn://192.168.2.56/mysource mysource --username guest --password 000000
实例:
注意:
代码仓创建后,如果我们没有改变它的位置,那么直接svnserve -d就行了,如果它的位置改变了(改变的原因可能是从linux上拷贝/备份到windows上或者其他原因),这时候我们必须通过-r 来指定具体的服务提供路径,否则将着不多代码仓,这时候对代码仓名称使用相对路径.
参考文档:
windows下TortoiseSVN操作
2)windows xp
Subversion(1.4.5)+TortoiseSVN(TortoiseSVN-1.4.7.11792)
下载:
http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe
Subversion安装在 D:\Subversion
SVN启动方式 D:\Subversion\bin\svnserve.exe" -d -r G:\svn
3)常用的一些命令
sc create svnservice binpath= "D:\Program Files\Subversion\bin\svnserve.exe --service -r E:\fsfs" displayname= "SVNService"
depend= Tcpip
要同步文件仓库和本地的副本,您可以执行 update 子命令,
语法如下:
cd ~/mysource
svn update
到处一个干净的版本(没有.svn)
svn export svn://hostname/linux/svn/mysource
export 下来的东西是干净的,没有.svn 用svn export 出来的东西,不能再进行提交
往代码仓中添加/提交一个新的文件
svn add file
svn commit commit
从代码仓中删除一个文件
svn del file1svn commit
删除工作副本中所有的.svn
find . -type d -iname ".svn" -exec rm -rf {} \; -iname 匹配模式
打印所有版本版本信息svn log -v >log.txt
svn log -v 打印 某一版本的信息svn log -r 13 -v
通过具有安全套接字(SSL)的自带协议访问(svn+ssh://)
运行了 ssh 服务并允许接入。要验证这一点,请尝试使用 ssh 登录计算机
注意:在这种方式下,您必须使用完整的路径(/home/svn/myproject)来访问 SVN 文件仓库 基于服务器的配置,它会要求输入密码。您必须输入您用于登录 ssh 的密码,一旦通过验证,就会签出文件仓库中的代码svn+ssh:// 协议使用 SSL 加密来访问 SVN 文件仓库。如您所知,数据传输是加密的
subversion删除内容的问题
一、对之前版本要求不高的
1. export 出所有文件,删除你想要删除的
2. 删除代码库,用 svn create 命令重建之
3. 导入
优点:这样操作后库很干净,全是有用的东西
缺点:版本信息没有保留。
二、要求保留版本号
假设你使用Windows的客户端TortoiseSVN,你可以这样操作:
1。在工作目录下,选中要删除的文件和目录.
2。右键,点击菜单TortoiseSVN -> Delete,这时会看到那些文件已经没了
3。然后执行commit,会看到在提交对话框中出现了那些删除文件
提交后,这些文件和目录就被删除了
其它开发者update一下,他们工作目录的那些文件也相应地被删除
优点:在操作时看不到多余的文件,版本号保留了
缺点:库大小还是没有变
4)Eclipse下使用Subversion
5)其他资料,参考文档
EasyCM 0.8.0 发布 —— Apache、SVN、Trac的集成
EasyCM的目标是,方便地安装和设置一套集成的SCM环境。
0.8.0版(for Windows)包括:
Subversion,最好的免费的版本控制工具;
Trac,一个很不错的与Subversion集成的缺陷跟踪工具;
TortoiseSVN,Subversion的图形化客户端;
Apache,最流行的Web Server,以支持Subversion和Trac;
等等;
下载:
http://blog.chinaunix.net/u/31435/showart_447302.html
windows下的安装
http://blog.chinaunix.net/u/1696/showart_395071.html
http://blog.chinaunix.net/u/25605/showart_451800.html
svn论坛,可以在这里 查到常见问题
关于使用 Subversion 进行软件配置管理
与大多数版本控制工具不一样的是,在Subversion中,修订号是针对当前代码库中所有对象的(而不是针对特定对象的)包括:子目录、目录和文件。这样,修订号的实际意义也演变成:“对代码库的第几次提交”。
在了解使用流程之前,先看看客户端常用命令:
svn update | 从代码库获取最新的版本到当前Work Copy。 |
svn checkout | 从代码库取出版本,建立Work Copy。 |
svn add svn delete svn copy svn move | 当操作Work Copy时。这些命令不会马上对代码库发生作用,而是在svn commit之后代码库才会变化。 当命令是作用于非Work Copy(如url)时,代码库会立即反应这些命令的操作结果。 |
svn status svn diff svn revert | 检查更新状态的命令,最好在每次提交之前都使用它们检查一下。 svn status用于检查Work Copy下所有更新的概况; svn diff用于检查哪些部分进行了更新; svn revert用于放弃更新,并使用.svn目录中的对应的副本覆盖。 |
svn merge svn resolved | 解决版本冲突的命令。在冲突解决之后,需要使用svn resolved来告诉subversion冲突解决,这样才能提交更新。冲突发生时,subversion会在Work Copy中保存所有的目标文件版本(上次更新版本、当前获取的版本,即别人提交的版本、自己更新的版本、目标文件。假设文件名是sandwich.txt,对应的文件名分别是:sandwich.txt.r1、sandwich.txt.r2、sandwich.txt.mine、sandwich.txt)。同时在目标文件中标记来自不同用户的更改。 解决冲突的办法: - 手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行svn resolved filename来解除冲突,最后提交。 - 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行svn resolved filename并提交。 - 放弃自己的更新,使用svn revert,然后提交。在这种方式下不需要使用svn resolved。 对于svn resolved命令需要非常小心,必须是非常确定冲突已经解决才能使用。否则,会导致Subversion以为冲突解决,而使代码库不正确。 |
svn commit | 提交更新到代码库中。 |
svn log | 检查代码库日志,了解变动情况。 |
svn cat svn list | 显示代码库的目录结构和文件内容。 |
svn cleanup | 清除锁定文档,这些文档通常是由于subversion的命令被中断引起的。 |
svn import | 将目录导入代码库。 |
客户端使用的主要工作流程:
- 日常使用,开发者最常使用的模式。其使用流程:
- 分支管理,使用分支的主要场合:release和个人试验(如大规模的修改前)。对于前者,有必要一直存在;后者,则在实验完毕后不需要存在。在subversion中,没有明显的分支(或tag)概念,取而代之的是目录。这一点,与以前没有版本控制工具前的做法非常类似,即在修改前先复制到指定的目录,然后在进行后续的更新。使用目录来代替显式的分支(或tag),获得了概念上的简单,以及操作上的直观。同时还享受到了分支(或tag)带来的种种好处。建议在开始项目目录规划时就考虑分支(或tag),Subversion建议的目录结构:
形式1: 形式2:
主目录 /trunk /project-name/trunk
分支目录 /branches /project-name/branches
tag目录 /tags /project-name/tags
使用分支的流程:
客户端使用检查表:
- 保证是在最新的版本下进行开发,在工作之前首先与代码库同步。
- 当工作完成之后(即编写完程序,单元测试通过)尽快的提交,频繁的提交/更新可以降低在冲突发生的概率,以及发生时解决冲突的复杂度。
- 如果冲突频繁发生,就有必要找出原因了。
- 在提交时,书写明确的message。方便以后的查找更新的原因,毕竟随着时光流逝,记忆也会变得模糊。
- 分支结构不要太复杂,在创建branch时,确保repository是最新的。
- 在release临近时,建立release分支和小组。稳定release分支,不再添加新的特性。