Chinaunix首页 | 论坛 | 博客
  • 博客访问: 806045
  • 博文数量: 244
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2420
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-29 09:07
文章分类

全部博文(244)

文章存档

2011年(4)

2010年(3)

2009年(72)

2008年(119)

2007年(46)

我的朋友

分类: 项目管理

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

实例:

test/test1/aa test/test2/bb
cd test
svn import test1 svn://192.168.2.56/test/test1
svn import test2 svn://192.168.2.56/test/test2
或者 svn import test svn://192.168.2.56/test
svn co svn://192.168.2.56/test
svn co svn://192.168.2.56/test/test1
svn co svn://192.168.2.56/test/test1 test/test1


注意:
代码仓创建后,如果我们没有改变它的位置,那么直接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 进行软件配置管理

啥叫软件配置管理?——一个通俗的解释 作者 流水先生   查看 5330   发表时间 2007/3/13 03:12   作为一位从事软件配置管理工作的同志,我经常被亲朋好友问到的是,我有时候要向各级领导游说的是,啥叫软件配置管理?
我的经验是:

1. 如果想让他们从迷茫到更迷茫,那就跟他们背一段ISO/CMM里的定义。

2. 如果不想深谈,或者背景实在相差太远,那就跟他们说:
“当很多人在一起编写软件的时候,需要一些专门的管理和技术,让他们能够合作顺畅。
软件配置管理就是其中的一种。”

3. 如果大概讲一下,能有个概念,那就跟他们说:
“软件配置管理是围绕软件资产的管理。
啥叫软件资产呢,就是设计文档啦,源代码啦,可以跑的程序之类的。
那么,有什么要管理的呢?让我们把它和图书馆的图书管理做个对比。

它们有一些相似点。
首先,图书馆图书管理管的是图书资产,软件配置管理管的是软件资产,它们管的都是信息资产。

其次,图书管理,需要把图书进行分类,以便检索,需要图书存放在合适的地方,以便存取,还要防止虫吃鼠咬。
软件配置管理也类似,需要把软件资产——主要是源代码什么的,放在合适的目录结构里,放在合适的地方存储,防止丢失或者弄乱。

再次,在图书馆,要记录谁借出了哪本书,还没还。
而软件配置管理中也类似,需要记录谁借出了什么文件。
不过,跟图书管理不同的是,软件开发人员借出文件,常常是为了修改它。
软件配置管理要记录谁修改了什么文件,为什么修改,等等。

这里就引出了一系列事情要考虑:
比如,每个文件,不断修改,就产生了一个又一个的版本,需不需要存储呢?
一个产品的整个源代码树,也在总体上产生一个又一个的版本,需不需要存储呢?
怎么存储呢?

比如,可能两个人想要同时修改一个文件。这可能会导致一个人的工作丢失。
那么,是让他们一个改完了另一个再改呢,还是让他们同时改,将来合并呢?怎么保证呢?

再比如,有时候,一个公司会生产一系列相似的软件产品,它们之间是不是可以有某些共享呢?
在一个产品上的改动,是不是能比较方便的加到另外的产品上去呢?

所以说,软件配置管理是围绕软件资产的管理:
保证它们的存储;保证改动它们的时候,也就是进行软件开发的时候,不会产生混乱,有条有理,省时省力;等等。”


第3种解释,是我最喜欢的解释。
虽然还不完全(比如,没有说配置/关系),也不严谨(净是用劳动人民的大白话说的),
但是能给没怎么接触过SCM的同志一个比较正确、比较容易接受的第一印象了。
而且让人觉得,SCM确实有用~~~

Subversion简明手册--客户端使用
Subversion对于使用者来说,可以简单的视为“具有记忆功能的文件系统”,尤其是将“目录”这一概念纳入版本控制之后(这也是其他很多版本控制工具不具备的功能)。通过(目标,时间)这个坐标,唯一定位了处于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.r1sandwich.txt.r2sandwich.txt.minesandwich.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分支,不再添加新的特性。


http://blog.donews.com/foxgem/archive/2005/10/17/591848.aspx

阅读(1462) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~