svn

来源:互联网 发布:美工龙的教案 编辑:程序博客网 时间:2024/05/16 20:50

在服务器上启动SVN服务

sudo svnserve -d -r /home/svnuser/


$ sudo update-alternatives --config editor


一、SVN安装

1.安装包

$ sudo apt-get install subversion

2.添加svn管理用户及subversion组

$ sudo adduser svnuser

$ sudo addgroup subversion

$ sudo addgroup svnuser subversion

3.创建项目目录

$ sudo mkdir /home/svn

$ cd /home/svn

$ sudo mkdir fitness

$ sudo chown -R root:subversion fitness

$ sudo chmod -R g+rws fitness

4.创建SVN文件仓库

$ sudo svnadmin create /home/svn/fitness

5.访问方式及项目导入:

$ svn co file:///home/svn/fitness

或者

$ svn co file://localhost/home/svn/fitness

* 注意:

如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).

//–下面的命令用于将项目导入到SVN 文件仓库:

$ svn import -m “New import” /home/svn/fitness file:///home/svnuser/src/fitness

一定要注明导入信息

//————————–//

6.访问权限设置

修改 /home/svn/fitness/conf目录下:

svnserve.conf 、passwd 、authz三个文件,行最前端不允许有空格

//–编辑svnserve.conf文件,把如下两行取消注释

password-db = password

authz-db = authz

//补充说明

# [general]

anon-access = read

auth-access = write

password-db = passwd

其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,但如果想拒绝匿名用户的访问,只需把 read 改成 none 就能达到目的。

//–编辑/home/svnuser/etc/passwd  如下:

[users]

mirze = 123456

test1 = 123456

test2 = 123456

//–编辑/home/svnuser/etc/authz如下

[groups]

admin = mirze,test1

test = test2

[/]

@admin=rw

*=r

这里设置了三个用户mirze,test1,test2密码都是123456

其中mirze和test1属于admin组,有读和写的权限,test2属于test组只有读的权限

sudo chmod -R 777 db

7.启动SVN服务

svnserve -d -r /home/svn

描述说明:

-d 表示svnserver以“守护”进程模式运行

-r 指定文件系统的根位置(版本库的根目录),这样客户端不用输入全路径,就可以访问版本库

如: svn://192.168.12.118/fitness

killall svnserve  删除所有svnserver,以使新添加

这时SVN安装就完成了.

局域网访问方式:

例如:svn checkout svn://192.168.12.118/fitness –-username mirze –-password 123456 /var/www/fitness

———————————————————————–

二、HTTP:// [apache]

1.安装包 [已安装subversion]

$ sudo apt-get install libapache2-svn

创建版本仓库:

sudo svnadmin create /目录地址

目录地址必须存在,这个就是保存版本仓库的地方,不同的版本仓库创建不同的文件夹即可,比如:

sudo svnadmin create /home/svn/project

本来/home/svn/project这个目录下什么都没有,执行下面的命令之后再去看一下,多出一些文件和文件夹,我们需要操作的是conf这个文件夹,这个文件夹下有一个文件,叫做passwd,用来存放用户名和密码。

然后把这个版本仓库目录授权给apache读写:

sudo chown -R www-data:www-data /目录地址

然后来到打开apache配置文件:

sudo gedit /etc/apache2/mods-available/dav_svn.conf

加入如下内容:

<Location /project>

DAV svn

SVNPath /home/svn/project

AuthType Basic

AuthName “myproject subversion repository”

AuthUserFile /home/svn/project/conf/passwd

#<LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

#</LimitExcept>

</Location>

location说的是访问地址,比如上述地址,访问的时候就是

http://127.0.0.1/project

其中有两行被注释掉了,以保证每次都需要用户名密码。

最后一步就是创建访问用户了,建议将用户名密码文件存放在当前版本仓库下conf文件夹下,这样版本仓库多的时候无至于太乱。

因为conf文件夹下已经存在passwd文件了,所以直接添加用户:

sudo htpasswd -c /home/svn/project/conf/passwd test

然后输入两遍密码,laoyang这个用户就创建好了。

打开/home/svn/project/conf/passwd这个文件,会开到形如如下形式的文本:

test:WEd.83H.gealA  //后面是加密后的密码。

创建以后,再次需要往别的版本仓库添加这个用户,直接把这一行复制过去就可以了。

重启apache就可以了。

sudo /etc/init.d/apache2 restart




若想创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:

$ svn mkdir spool

$ svn add spool

$ svn commit -m “Adding ’spool’”

$ svn propset svn:ignore ‘*’ spool

$ svn ci -m ‘Adding “spool” and ignoring its contents.’

若想创建一个文件夹,但不加入版本控制,即忽略这个文件夹:

$ mkdir spool

$ svn propset svn:ignore ’spool’ .

$ svn ci -m ‘Ignoring a directory called “spool”.’

若已经创建了文件夹,并加入了版本控制,现在想忽略这个文件夹,但要保持文件夹的内容:

$ svn export spool spool-tmp

$ svn rm spool

$ svn ci -m ‘Removing inadvertently added directory “spool”.’

$ mv spool-tmp spool

$ svn propset svn:ignore ’spool’ .

$ svn ci -m ‘Ignoring a directory called “spool”.’

若要忽略文件夹里的某几个文件

$ svn mkdir spool

$ svn add spool

$ svn commit -m “Adding ’spool’”

gvim .svnignore

每种要忽略的文件加一行,如:

.svnignore

*.pyc

*.cash

test.php

然后

svn propset svn:ignore -F .svnignore .

svn status

最后一种方法中的最后那个目录很重要。.svnignore里定义的内容只能是当前目录,不能是多层目录,对于要定义多层目录里的文件忽略,可以先 写好.svnignore,然后svn propset svn:ignore -F .svnignore [所要操作的目录],这样就起作用了

一、搭建 Subversion 服务器


1、首先需要安装 subversion 这个软件:

sudo apt-get install subversion


2、在 /home/nicky 下建立一个 repo,名称为 testproject:

svnadmin create /home/nicky/testproject


3、然后把 /fun/theme 目录下的内容导入到这个 repo 中:

svn import -m "" /fun/theme file:///home/nicky/testproject


4、最后给这个 repo 建立一个 svn 自带的 svnserve:

svnserve -d -r /home/nicky/testprojec


二、使用 Subversion


1、你可以使用下面的命令来获得一个 wc,如把它取名为 projecout。


svn checkout svn://127.0.0.1/ projecout

或者简写为:

svn co svn://127.0.0.1/ projecout


2、如果需要将修改从 wc 中发送到 repo。


先到 wc 所在目录,然后使用下面的命令将修改发送到 repo:

svn commit -m "note"


三、常用命令:


取出指定版本,如取出版本 2:

svn checkout --revision 2 svn://....


显示提交日志信息:

svn log


显示库中的最新信息:

svn log --revision HEAD


四、设定用户的验证和相应的权限。


现在我们先建立一个叫 project1 的 repo,然后转到 project1中:


svnadmin create d:\svnprojects\project1

cd d:\svnprojects\project1


project1 目录下有一堆目录,进入 conf 并打开 svnserve.conf 这个文件,找到以下几行,并把前面的注解符号 ‘#’ 去掉,注意千万在每行的前面别留任何空格。

anon-access = read

auth-access = write

password-db = passwd

其中 anon-access 和 auth-access 分别为匿名和有权限用户的权限,默认给匿名用户只读的权限,这很好,我们不需要改它们。但如果想拒绝匿名用户的访问,只需把 read 改成 none 就能达到目的。password-db 后的 passwd 则为定义用户名及密码的文件路径。这个文件默认跟 snvserve.conf 在同一个目录,下面看看怎么配置 passwd 中的内容。


[user]

# harry = harryssecret

# sally = sallyssecret


harry 和 sally 这两行分别定义了可以对 repo 进行写入的用户的用户名和密码。我们可以在下面加上自己的用户名和密码,比如


testsvn = tester


这样就给了用户 testsvn 往 repo 中写的权限。存盘退出后,svn 服务器就算正式可以运行了!把所有需要管理的项目都放在 d:\svnprojects 这个目录下,像正常那样用 svnadmin create 命令建立 repo,如果要 checkout repo,则在命令行中输入:


svn checkout svn://192.168.0.1/project1


如果要 commit 刚需要输入刚才设置好的用户名和密码:


svn commit -m "we are commiting changes!" --username testsvn --password tester


附:





清理和删除svn信息

svn, 删除svn信息是根据文件夹里面的 .svn 文件夹保存相关配置的,删除此文件夹即可去掉svn信息:

linux下: find . -type d -name ".svn"|xargs rm -rf

复制代码或 find . -type d -iname ".svn" -exec rm -rf {} \;

复制代码windows下:

1 复制项目文件夹,跳过隐藏文件(.svn一般是设置为隐藏,xcopy/? 可以看到各种参数) xcopy project_dir project_dir_1 /s /i

复制代码2 删除文件夹里的 .svn,有些转载写的是 %%a,那是错误的 for /r ./ %a in (./) do @if exist "%a\.svn" rd /s /q "%a\.svn"

复制代码3 注册表添加右键操作

Jon Galloway提供了一段注册表代码,可以将”Delete SVN Folders”命名增加到资源管理器的右键上,这样,鼠标点两下就能把选中目录下的所有.svn目录干掉了。Works just great!

代码为: Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]

@="Delete SVN Folders" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]

@="cmd.exe /c \"TITLE Removing SVN Folders in %1 && COLOR 9A && FOR /r \"%1\" %%f IN (.svn) DO RD /s /q \"%%f\" \""

复制代码将这段代码保存为一个.reg文件,双击确认导入注册表即可。



svn propset svn:ignore笔记

svn:ignore纠结的那个纠结啊,先纠结怎么用,而后纠结递归,在而后纠结怎么让已经在版本控制中的目录ignore,曲折啊!

写点心得吧:

新创建的目录,不在版本控制中的直接propset svn:ignore就行

创建了一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容:

$ svn mkdir xxx

$ svn propset svn:ignore '*' -R xxx   //*表示改目录下所有文件,但并不对子目录有效,针对子目录递归需要加-R参数

$ svn commit -m 'Adding "xxx" and ignoring its contents.'

创建一个文件夹,但不加入版本控制,即忽略这个文件夹:

$ mkdir xxx

$ svn propset svn:ignore 'xxx'   xxx                    

$ svn commit -m 'Ignoring a directory called "xxx".'


对已经创建了文件夹,并在版本控制库中,如果想忽略这个文件夹,但要保持文件夹的内容:


$ svn export xxx xxx.bak           //直接mv xxx xxx.bak也一样

$ svn del xxx

$ svn commit -m 'Removing inadvertently added directory "xxx".'

$ mv xxx.bak xxx

$ svn propset svn:ignore 'xxx' -R  xxx.    

$ svn commit -m 'Ignoring a directory called "xxx".'

PS:已经在版本控制中的目录直接进行propset svn:ignore是不生效的,所以需要先删除,而后再commit,然后还原本地文件之后再进行svn:ignore设置.

svn del会从版本库中删除但是文件也被删了, 这样会造成一更新所有人的文件都被删除掉。

用带参数--keep-local可以保留本地副本, 注意别人的副本如果没有更新过也会被删除掉

svn del --keep-local config.php


delete (del, remove, rm): 从版本库中删除文件和目录。

用法: 1、delete PATH...

2、delete URL...

svn全局忽略:

,修改目录下 .subversion/config文件,取消global-ignroes的注释

global-ignores = CVS .DS_Store Thumbs.db WS_FTP.LOG _notes _vti_* *.LCK

补充记录一些之前关于svn认证时纠结心得:

首先是关于svn认证:

天下文章一大抄,一抄害苦后来人

不知道那位大侠写的文档(该文档被若干人死去活来的转,未见修复)中写的passwd文档内【users】段的格式是:

username - password   (正确格式是 username = password)




用svn st查看时,常有 ? 标记的文件,其实这些文件是不要版本控制的,每次出现会干扰视线。

可以通过svn的配置文件: /etc/subversion/config

配置全局忽略: global-ignores

对个别目录和文件的忽略:

如果想对public/photos目录设置为ignores ,要对public目录进行设置: svn pe svn:ignore public

进入编辑器输入photos 保存就可以了。多个文件分隔用换行



SVN 全局忽略列表


公共过虑的文件模式

*.[Bb][Aa][Kk] *.[Dd][Bb] *.[Ll][Oo][Gg] *.[Mm][Aa][Pp] *.[Tt][Mm][Pp]


delphi 源码提交时需过虑的文件模式

*.~* *.[Dd][Dd][Pp] *.[Dd][Cc][Pp]  *.stat *.tds


vc6 vs2003 vs2005  源码提交时需过虑的文件模式

*.aps *.clw *.ilk *.idb *.ncb *.opt *.obj *.plg *.pch *.pdb *.suo *.user [Dd]ebug [Rr]elease


*.o *.bin *.out *.scc


所有需过虑的文件模式

*.[Bb][Aa][Kk] *.[Dd][Bb] *.[Ll][Oo][Gg] *.[Mm][Aa][Pp] *.[Tt][Mm][Pp] *.~* *.[Dd][Dd][Pp] *.[Dd][Cc][Pp]  *.stat *.tds *.aps *.clw *.ilk *.idb *.ncb *.opt *.obj *.plg *.pch *.pdb *.suo *.user [Dd]ebug [Rr]elease *.fblz *.o *.bin *.out *.scc






解决冲突:svn resolve --accept working a.txt





导出(导出一个干净的不带.svn文件夹的目录树)

svn export [-r 版本号]  http://路径(目录或文件的全路径) [本地目录全路径] --username 用户名

svn export [-r 版本号]  svn://路径(目录或文件的全路径) [本地目录全路径] --username 用户名

svn export 本地检出的(即带有.svn文件夹的)目录全路径  要导出的本地目录全路径

注:第一种从版本库导出干净工作目录树的形式是指定URL,

如果指定了修订版本号,会导出相应的版本,

如果没有指定修订版本,则会导出最新的,导出到指定位置。

如果省略 本地目录全路径,URL的最后一部分会作为本地目录的名字。

第二种形式是指定 本地检出的目录全路径 到要导出的本地目录全路径,所有的本地修改将会保留,

但是不在版本控制下(即没提交的新文件,因为.svn文件夹里没有与之相关的信息记录)的文件不会拷贝。

例子:

svn export svn://192.168.0.3/测试工具 /home/testtools --username wzhnsc

svn export http://192.168.0.3/test/testapp --username wzhnsc

svn export /home/testapp /home/testtools

8、比较差异

svn diff 文件名

svn diff -r 修正版本号m:修正版本号n文件名

例子:

svn diff test.php<- 将修改的文件与基础版本比较

svn diff -r 200:201 test.php<- 对修正版本号200 和 修正版本号201 比较差异


原创粉丝点击