环境:Win7 32 bit
SVN简介:程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本。
Subversion是一个*/开源的版本控制系统,一组文件存放在中心版本库,记录每一次文件和目录的修改,Subversion允许把数据恢复到早期版本,或是检查数据修改的历史,Subversion可以通过网络访问它的版本库,从而使用户在不同的电脑上进行操作。
VisualSVNServer集成了Subversion和Apache。使用VisualSVNServer作为服务端,TortoiseSVN作为客户端。
VisualSVN Server的配置和使用方法【服务器端】
VisualSVN下载地址:http://subversion.apache.org/packages.html
http://www.l-ch.net/
下载后安装,一直【Next】,到如下所示
Location是指VisualSVN Server的安装目录,Repositorys是指定你的版本库目录,Server Port指定一个端口,Use secure connection勾上表示使用安全连接。继续【Next】到【Finish】。
安装好VisualSVN Server后,运行VisualSVN Server Manger,下面是启动界面:
右侧状态区包括:
Status:服务运行状态
SubversionAuthentication:账户信息
Respositories:代码库信息
添加一个代码库【Repository】,左侧Respositories上右键菜单中选择创建一个代码库,如下图:
在下图所示的文本框中输入代码库名称:
上图中的选择Empty……,只创建空的代码库QGroundStation ; 如果选中Single……则在代码库QGroundStation下面会创建trunk、branches、tags三个子目录。
选择默认选项,点击Create,代码库就创建成功了。
创建完代码库后,此时还没有任何内容在里面。
下面说明如何迁入源代码:
迁入源代码到SVN服务器
安装TortoiseSVN后,我们在12-21文件夹中已经创建了一个项目,要把这个项目的源代码迁入到SVN Server上的代码库中,使用TortoiseSVN的将源代码迁入。
右键点击12-21文件夹,如图,点击Import选项,
弹出
其中URL of repository是svn server中代码库的根目录,在信息输入框中写记录日志是个非常好的习惯
点击OK按钮,会弹出下面的窗体,要求输入凭据。输入用户名密码后,点击OK按钮,
如图所示,源代码已经成功签入SVN服务器了。
签出源代码到本机
在本机创建文件夹QGroundStation-1221,右键点击Checkout,弹出如下图的窗体(参照):
一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。
注:
一个新检出的工作复本使用绿色的对勾重载,表示Subversion状态正常。
在你开始编辑一个文件之后,状态就变成了已修改,而图标重载已变成了红色感叹号。通过这种方式,你可以很容易地看出那些文件从你上次更新工作复本被修改过,且需要提交。
如果在提交的过程中出现了冲突,图标就会变成了黄色感叹号。
加号告诉你有一个文件或者目录已经被计划加入到版本控制中。
提交修改过的文件到SVN服务器
注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。
在QGroundStation-1221文件夹上点击右键或在QGroundStation-1221文件夹内的空白处点击右键,点击SVN Commit…弹出下面的窗体:
点击OK按钮后,弹出如下图的窗体:
点击OK按钮,修改过的文件提交成功。
添加新文件到SVN服务器
1、 在文件夹内的空白处点击右键,点击SVN Commit…,和上面讲的提交修改过的文件到SVN服务器一样,就可以了。
2、 也可以在新建的文件上点击右键,点击TortoiseSVN=>>Add,这样只是将这个文件提交到“变更列表”中。必须VN Commit这个文件一次,才可以将其真正提交到SVN服务器上的代码库中。
添加文件夹的步骤也是一样的。
更新本机代码与SVN服务器上最新的版本一致
只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键,点击SVN Update,就可以了。
注意:更新操作可能会因为版本冲突而失败,这是可以使用合并【Merge】或其他方法解决;也可能因为锁定【Get Lock】而失败,这是需要先解锁【Release Lock】。
重命名文件或文件夹,并将修改提交到SVN服务器
在需要重命名的文件/件夹上点击右键,点击TortiseSVN=>>Rename…,在弹出的窗体中输入新名称,点击OK按钮,就可以了。此方法不是直接重命名,我们使用SVN Commit提交到SVN服务器后才真正重命名。
删除文件或文件夹,并将修改提交到SVN服务器
1、 直接删除文件或文件夹,然后使用SVN Commit提交更新到SVN服务器。
2、 在要删除的文件/文件夹上右键,TortoiseSVN=>>Delete,此方法也不是直接删除,而是将状态置为删除,仍需要SVN Commit,在变更列表中选择被删除文件,执行后才真正删除。
说明:实际上,从你把源代码迁迁入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。
安全性设置
在左侧的Users上右键:
输入上面的信息,点击OK,我们就创建一个用户了。按照上面的过程,分别添加用户Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:
http://www.l-ch.net/
点击上图中的”Add…”按钮,在下图中选择我们刚才添加的用户,点击OK按钮:
说明:大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权。
按照下图所示,分别对用户【或组】进行授权:
注意:向SVN服务器提交源代码的时候,一定不要提交bin、obj等文件夹,否则会很麻烦。但是web项目的bin目录除外,但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。
一个好习惯:如果项目中引用了其他的第三方的程序集,比如EnterpriseLibrary、FCKEditor等,这时候不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目录,把需要的程序集复制到这里,然后从Library目录引用。
文章来源:申博官网
-----------------------------Linux下服务器--------------------------------------------------------------------------
Linux下SVN服务器安装及配置记录 Linux下SVN服务器安装配置 第一章 安装 1. 采用源文件编译安装。源文件共两个,为: subversion-1.6.1.tar.gz (subversion 源文件) subversion-deps-1.6.1.tar.gz (subversion依赖文件) 注意文件版本必须一致,否则很容易产生各种奇怪的问题. 2. 上传以上两个文件到服务器上,解压。解压命令为: tar xfvz subversion-1.6.1.tar.gz tar xfvz subversion-deps-1.6.1.tar.gz 指令简介:tar 为解压命令,xfvz为tar命令的参数,用于解压tar.gz格式压缩的文件。 3. 解压后生成 subversion-1.6.1 子目录,两个压缩包解压后都会自动放到此目录下,不用手动更改。 4. 进入解压子目录: cd subversion-1.6.1 5. 执行
./configure --prefix=/usr/local/svn ./configure时会出现以下错误:configure: error: We require OpenSSL; try –with-openssl configure failed for serf。 这是因为没有安装openssl相关包
openssl官方网址:http://www.openssl.org/ linux
下openssl的安装: wget http://www.openssl.org/source/openssl-1.0.0g.tar.gz tar xvzf openssl-1.0.0g.tar.gz cd openssl-1.0.0g
然后: ./config --prefix=/usr/local/ssl shared zlib-dynamic enable-camellia
更多详细帮助请运行 ./config --help
然后执行:
make depend
Make Make test make install
编辑/etc/ld.so.conf, add to paths /usr/local/ssl/lib(可以直接在 /etc/ld.so.conf.d文件夹下再创建一个.conf文件,把/usr/local/ssl/lib拷贝到里面,另外也可以在现有的.conf文件中添加/usr/local/ssl/lib这个路径,反正ld.so.conf中包含了这个文件夹下的所有.conf文件)
安装之后会在/usr/local下生成一个ssl目录,设置环境变量,在/etc/profile的PATH中增加如下内容: PATH=/usr/local/ssl/bin:/sbin/:$PATH:/usr/sbin export PATH 6.再进到subversion-1.6.1 再执行 ./configure --prefix=/opt/subversion 进行配置设定并指明安装目录. 注意prefix前是两个减号. 默认不带BDB包, 所以默认使用的是FSFS模式. 若想使用BDB模式需另外下载BDB包.建议使用FSFS模式. 指令简介:configure命令用于检查安装平台和目标特征,prefix用于指定路径。 configure完成可能会出现: You don’t seem to have Berkeley DB version 4.0.14 or newer installed and linked to APR-UTIL. We have created Makefiles which will build without the Berkeley DB back-end; your repositories will use FSFS as the default back-end. You can find the latest version of Berkeley DB here: http://www.oracle.com/technology/software/products/berkeley-db/index.html 你似乎没有Berkeley DB版本4.0.14或更新版本安装并链接至四月- util的。我们已创建Makefile文件的将建立一个没有了Berkeley DB后端,你的版本库作为默认后端使用FSFS格式。你可以找到最新版本Berkeley DB的位置。 这个提示可以跳过, 因为不使用BDB存储。 7. 执行 make 编译. 8. 执行 make install 安装.
9. 添加环境变量: vi /etc/profile 在文件最后加入: SVNPATH=$PATH:/usr/local/svn/bin export SVNPATH 10. 测试SVN是否安装成功,执行: svnserve --version 如果显示版本信息, 则安装成功. (如果没有安装svnserve,请先安装apt-get install subversion) 第二章 配置 本系统采用为每个项目单独建一版本库的策略。配置文件,密码文件,访问控制文件等都放在版本库的conf目录下。所以每次开始一个新项目都必须新建一个版本库,并重新配置各配置文件。还有很重要的一条,要求各组员重新配置客户端,包括服务器版本库路径,本地路径等信息。 1. 建立版本库目录,建立好的版本库目录与安装目录不在同级目录下(可建立多个,新建库后以下各项都需重新配置。注意区别安装目录与版本库目录,以下讲的都是版本库目录) mkdir –p /opt/svndata/repos 2. 建立svn版本库(与上面目录对应) svnadmin create /opt/svndata/repos 执行此命令后svn自动在repos目录下添加必须的配置文件. 注意:版本库不同于一般的文件夹, 直接在操作系统上新建文件无法被SVN识别, 必须使用import等命令将文件导入版本库. 此为svn内部指令,create用于新建版本库。请使用svn help查看详细说明。
3. 修改版本库配置文件 vi /opt/svndata/repos/conf/svnserve.conf 各参数功能在配置文件的注释中有说明, 此处配置如下: [general] anon-access = none # 使非授权用户无法访问 auth-access = write # 使授权用户有写权限 password-db = /opt/svndata/repos/conf/passwd # 指明密码文件路径 authz-db = /opt/svndata/repos/conf/authz # 访问控制文件 realm = /opt/svndata/repos # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。 其它采用默认配置. 各语句都必须顶格写, 左侧不能留空格, 否则会出错. 指令简介:这是svn配置文件的格式,请按照以上格式书写。 4. 配置用户 passwd文件 输入以下内容: [users] <用户1> = <密码1> admin = admin <用户2> = <密码2> username2 = password2 可以添加多个,此为用户名密码对。 5. 配置权限 authz文件 指令简介:此配置文件采用“基于路径的授权”策略,中括号里指定路径,以下列出对各用户的授权。包括只读r,读写rw。没有列出的用户,则不允许访问。还可以对用户分组,具体请参考svn手册,以下是简单例子:
用户组格式: [groups] <用户组名> = <用户1>,<用户2> 其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。 版本库目录格式: [<版本库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限> 其中,方框号内部分可以有多种写法: /,表示根目录及以下。根目录是svnserve启动时指定的,我们指定/opt/svndata。这样,/就是表示对全部版本库设置权限。 repos1:/,表示对版本库1设置权限 repos2:/abc, ,表示对版本库2中的abc项目设置权限 repos2:/abc/aaa, ,表示对版本库2中的abc项目的aaa目录设置权限 权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。 示例: [groups] MDS4000II_group = admin,zhangl [/] admin = rw viewer = r [/dev] admin = rw viewer = r * = [/baseline] admin = rw * = [/prj] admin = rw * = [/dev/01 MDS4000II] @MDS4000II_group = rw * = 注意:配置auth 、passwd和svnserve.conf一定要心细,否则客户端访问时会认证失败,如不能访问,百度和谷歌上有很多资料可供参考。 三、启动svn
------------------------------------Linux 客户端---------------------------------------------------------
windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说。主要说说linux下svn的使用,因为linux下大部分的操作都是通过命令行来进行,所以必须得掌握linux下svn的常用指令。当然linux下也有模仿TortoiseSVN的linux X程序,例如RabbitVCS,模仿程度很高,但很容易拖慢X,因此不推荐。
(如果是第一次提交文件,很可能会出现“svn:'.'不是工作副本”,即当前目录不是工作副本,这个时候需要用到import:
eg:svn import . url)
1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m
“LogMessage“ [-N] [--no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:svn commit -m “add test file for my test“ test.php
简写:svn ci
4、加锁/解锁
svn lock -m “LockMessage“ [--force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、更新到某个版本
svn update -r m
path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】M状态一般比较多
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m
“delete test file”
或者直接svn delete test.php 然后再svn ci -m ‘delete
test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
——————————————————————————
以上是常用命令,下面写几个不经常用的
——————————————————————————
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法: 1、mkdir PATH…
2、mkdir URL…
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate
FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动
(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用
这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH…
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的
相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)