subversion安裝、備份、安全認證實踐筆記——宋軼聰

 

在windows上配置svn的方法

在linux 10.117.100.130 上安裝svn

svn庫的導入導出

查看svn服務器版本

SVN備份策略

Svn 服務配置和維護常用命令

linux下啓動和停止

win下啓動和停止svn

把svn加爲系統服務

配置apache通過http訪問svn

svn 命令行

 

 

 

 

 

 

 

 

 

 

====================================在windows上的配置方法===============================================================

1.    環境和軟件準備

Window-Subvsersion : http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

 

2.    配置管理

2.1. 創建倉庫 (svnadmin)

在硬盤上創建個空目錄,作爲 SVN 的倉庫目錄如: E:/svnroot/repository

下面使用兩種方式創建倉庫的初時文件結構和存儲方式。

  • 命令方式

  • TortoiseSVN 客戶端方式,

後面所有文檔都採用兩種方式說明,其功能完全相同。請根據實際情況選擇使用。

 

命令方式( DOS 下):

# 默認方式,採用 FSFS 方式存儲數據,這是推薦方式,管理和遷移相對 bdb 方式簡單

svnadmin create E:/svnroot/repository

svnadmin create &endash;fs-type bdb E:/svnroot/repository

上爲bdb的文件系統方式, 一般默認是native的FS即 NTFS

 

TortoiseSVN 客戶端方式

安裝TortoiseSVN

創建空目錄

進入空目錄,右鍵TortoiseSVN 》創建庫here

 

 

 

2.2. 配置服務

進入倉庫目錄下的 conf 文件夾。也就是 E:/svnroot/repository/conf

裏面有 3 個默認的配置文件: authz , passwd , svnserve.conf

  • authz 典型的配置是設置由 authz 控制授權,即哪個組可以對這個目錄有什麼權限

  • svnserve.conf 控制 svnserve 的啓動配置選項,可以配置認證和授權方式,

  • passwd 控制認證的方式來控制訪問權限。也可以使用匿名方式,但不推薦。所有用戶和密碼

使用 authz 和 passwd 的典型配置:

 

請特別注意:以下三個配置文件的配置,每行有效配置前不能有空格,不然配置會失敗

 

------------------------------------------服務配置文件 svnserve.conf-----------------------------------------------------

&ldots;&ldots;

### 匿名方式不允許訪問

anon-access = none

&ldots;&ldots;

### Uncomment the line below to use the default password file.

### 表示訪問倉庫的認證有文件 passwd 提供的賬戶確定

password-db = passwd

&ldots;&ldots;

### Uncomment the line below to use the default authorization file.

### 表示認證後的賬戶訪問權限由文件 authz 定義

authz-db = authz

### This option specifies the authentication realm of the repository.

&ldots;&ldots;

#realm = My First Repository

 

--------------------------------------------認證配置文件 passwd--------------------------------------------------------------

passwd 文件實際提供訪問本倉庫的賬戶管理,文件格式就是 ini 方式的格式

[users]

# harry = harryssecret

# sally = sallyssecret

testuser1=testuser1

testuser2=testuser2

這表示本倉庫配置了二個用戶及:其中一個用戶 testuser1, 他的訪問密碼是 testuser1

訪問密碼可以使用明文,也可以使用 htpasswd.exe ( apache 服務器提供的工具方法,安裝 apache 服務器後,在其 bin 目錄中有該程序文件)進行加密處理。

 

--------------------------------------------授權配置文件 authz----------------------------------------------------------------

該文件負責認證後的用戶的權限控制,配置稍微複雜,但其實也就是個 ini 配置文件而已。

典型配置:

# groups 段提供配置組的功能 , 但組成員必須是 passwd 文件中定義的用戶纔有效。可以對組

# 進行權限控制,所有組成員具有組對應的訪問權限。

[groups]

# 表示定義了一個管理組叫 admin_group, 包括 harry 和 sally , admin_group 前千萬不能有空格

admin_group=testuser1

dev_group=testuser2

# 下面就是定義具體倉庫下目錄的訪問權限

# 一般對管理員來說都具有整個倉庫的讀寫權限,一般人員對整個敞開具有讀取權限,下面

# 就是這樣的配置 ,[/] 表示整個倉庫的根,組的引用使用 @ ,對應的權限可以是 r,w,rw 或空

[/]

@admin_group = rw

@dev_group = rw

* = r

[/test_project]

@admin_group = rw

@dev_group = rw

* = r

[repository:/]

@admin_group = rw

@dev_group = rw

* = r

以上的配置完成後,就可以啓動服務器了,下面說明服務器的啓動。

注意,以上 authz 和 passwd 文件在管理中因爲具體項目的加入和人員的變動會經常的修改,這也是 SVN 管理主要的工作

 

 

2.3. 啓動服務 (svnserve)

Svn 服務器一般有三種方式, svnserve , apache 和 SSH

其中常用的有 svnserve 和 apache 方式。本文只以 svnserve 方式講解。

  • svnserve 是最高效的方式,一般應用於內部開發網中使用。

  • Apache 方式因爲可以很好的部署在 internet 上,所以公網使用最方便,但配置稍微相對複雜點點,呵呵~~。

  • ssh方式

 

命令方式( DOS 下)啓動:

svnserve &endash;d &endash;r "E:/svnroot/repository"

-d 參數是以獨立服務的方式啓動

-r 是制訂要加載的倉庫的物理路徑

 

添加爲Windows系統服務

方法1(推薦):

在Windows NT中(包括Windows XP, Windows 2000, Windows 2003 Server, Windows vista)本身包含了一個安裝服務的工具,叫做"Service Control",也就是sc.exe。

1.安裝爲服務:

例:我的Subversion安裝在"C:/Program Files/Subversion",版本庫在"E:/svnroot/repository",

而我希望對應的Subversion服務名爲svnservice,安裝這個svn服務的命令就可以這樣寫:

SC create svnservice binPath= "/"C:/Program Files/Subversion/bin/svnserve.exe/" --service --root /"E:/svnroot/repository/"" displayname= "SVNService" depend= Tcpip start= auto   配置爲自啓動服務

 

在以前啓動svnserve時會使用"-d"選項,也就是守護進程模式,在這裏不能使用,會導致服務無法啓動。同樣,"-i"和"-t"選項也不能使用。

另外還有兩點需要小心處理

  • 首先,如果路徑中包括空格,一定要用”r;/”處理雙引號,例如上面的例子中如果svnserve.exe在

”r;C: /Program Files/Subversion/bin/svnserve.exe”中,則命令應該寫爲”r;binpath= "/"C:/Program Files/Subversion/bin/svnserve.exe/"”(”r;”中的內容):

SC create svnservice binPath= "/"C:/Program Files/Subversion/bin/svnserve.exe/" --service --root /"E:/svnroot/repository/"" displayname= "SVNService" depend= Tcpip

  • 其次,sc對選項的格式還有要求,例如”r;depend= Tcpip”不能寫爲”r;depend = Tcpip”或”r;depend=Tcpip”,也就是”r;=”前不能有空格,而後面必須有空格

 

2.啓動服務

在命令行窗口執行完這個命令之後,服務還沒有啓動,你可以繼續運行"net start svnservice"啓動這個服務

 

3.停止服務

然後使用"net stop svnservice"停止服務

 

4.刪除服務

如果服務安裝的有問題,你可能需要刪除服務。要刪除前面添加的服務,只需要運行"sc delete svnservice",

"svnservice"就是我們創建服務時使用的名字。

 

5.配置服務是自動啓動

默認情況下安裝的服務不會隨Windows的啓動而啓動,爲了使svn服務能夠隨Windows啓動而啓動,

需要修改一下"sc create"命令(首先要刪除),增加"start= auto"選項:

 SC create svnservice binPath= "/"C:/Program Files/Subversion/bin/svnserve.exe/" --service --root /"E:/svnroot/repository/"" displayname= "SVNService" depend= Tcpip start= auto

當然你也可以使用圖形化的工具修改服務的屬性,你可以在”r;開始->運行...”中執行"services.msc",然後在界面中修改。

在vista下要以管理員的權限運行CMD, 否則會出現權限問題.

 

 

=================================在linux 10.117.100.130 上安裝svn===============================================================

1、下載svn for linux 最新版           http://subversion.tigris.org

2、連接vpn並使用sshsecure client上傳

3、使用cat /proc/version  查看系統是什麼Linux,

結果顯示是centos

4、查看磁盤使用情況

[root@localhost ~]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/mapper/vgroot-root

                       6887724   1757136   4775056  27% /

/dev/mapper/vgehong-ehong                                                                            邏輯卷

                      20282620    176200  19059484   1% /usr/local/ehong

/dev/sda1               194442     14424    169979   8% /boot

tmpfs                  2022252         0   2022252   0% /dev/shm

 

5、解壓縮並安裝

  1. 解壓:#: tar zxvf subversion-1.3.2.tar.gz

  2. 依次輸入./configure , make , make install 進行編譯安裝完成。

  3. 開啓SVN服務:svnserve -d

  4. 檢測服務是否開啓:netstat -ntlp如果看到3690的端口正常開放了,證明SVN啓動了。

 

 

tar xfj subversion-1.4.3.tar.bz2

tar xfj subversion-deps-1.4.3.tar.bz2

# subversion-deps的文件也會解壓到subversion-1.4.3目錄中

cd subversion-1.4.3

rm -rf apr

rm -rf apr-util

ln -s /home/tmp/httpd-2.2.4/srclib/apr apr

ln -s /home/tmp/httpd-2.2.4/srclib/apr-util apr-util

./configure && make && make install

安裝完成後,查看是否存在文件$APACHE_HOME/modules/mod_dav_svn.so(默認/usr/local/apache2/modules/mod_dav_svn.so)。另外,如果該機器上以前是裝過舊版本的SVN,要把"/usr/local/lib/libsvn*"文件都刪除。

 

 

正式使用前準備:

首先我們得建立一個SVN的項目,一般人都認爲建立項目就只需要一個文件,在我第一次使用SVN之前都有這樣的看法,SVN建立項目需要建立文件夾

  1. 建立項目命令:svnadmin create project_name project_name 爲你的project名字,可以任意取。

建立完畢後,project_name是一個文件夾,進入文件夾,可以看到一個conf的文件夾。

    2.進入文件夾可以看到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

Finish

 

 

=====================================svn庫的導入導出============================================================================

svn提供了一個類似oracle export成dump文件的一個工具svnadmin dump,導出的文件爲文本文件

 

//導出

1、首先進入庫的相應目錄

cd e:/svnroot

2、導出/java-source所有文件到

E:/svnroot>svnadmin dump ./java-source > java-dump

3、將java-dump上傳到

 

//還原

$svnadmin load java-source < java-dump

 

ok成功導入。

 

 

停止subversion服務

ps &endash;aux | grep svnserve

kill -9 ID號

 

 

 

 

 

 

 

 

查看svn服務器版本

C:/Documents and Settings/server>svnadmin --version                        用svn --version效果一樣

svnadmin,版本 1.5.6 (r36142)

   編譯於 Mar  6 2009,14:54:47

版權所有 (C) 2000-2008 CollabNet。

Subversion 是開放源代碼軟件,請參閱 http://subversion.tigris.org/ 站點。

此產品包含由 CollabNet(http://www.Collab.Net/) 開發的軟件。

下列版本庫後端(FS) 模塊可用:

* fs_base : 模塊只能操作BDB版本庫。

* fs_fs : 模塊與文本文件(FSFS)版本庫一起工作。

 

 

[root@localhost ~]# svn --version

svn, version 1.6.11 (r934486)

   compiled Apr 20 2010, 00:24:22

Copyright (C) 2000-2009 CollabNet.

Subversion is open source software, see http://subversion.tigris.org/

This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.

  - handles 'http' scheme

  - handles 'https' scheme

* ra_svn : Module for accessing a repository using the svn network protocol.

  - with Cyrus SASL authentication

  - handles 'svn' scheme

* ra_local : Module for accessing a repository on local disk.

  - handles 'file' scheme

 

 

 

====================================SVN備份策略=============================================================================

文章摘要:Subversion適合於規模一般(幾十開發人員)的項目代碼的版本管理工作。使用體驗較VSS、CVS等好,推薦在選擇版本管理工具時可以試用一下。

安裝Subversion

        1 安裝svn-1.4.0-setup。

        2 將SVN配置成服務。

(本文例子基於FreeBSD/Linux實現,windows環境請自己做出相應修改)

   配置管理的一個重要使命是保證數據的安全性,防止服務器應硬盤損壞、誤操作造成數據無法恢復的災難性後果。因此制定一個完整的備份策略非常重要。

一般來說,備份策略應規定如下幾部分內容:備份頻度、備份方式、備份存放地點、備份責任人、災難恢復檢查措施及規定。

   備份頻度、存放地點等內容可以根據自己的實際情況自行制定;本文重點描述備份方式。

   svn備份一般採用三種方式:1)svnadmin dump 2)svnadmin hotcopy 3)svnsync.

注意,svn備份不宜採用普通的文件拷貝方式(除非你備份的時候將庫暫停),如copy命令、rsync命令。

筆者曾經用 rsync命令來做增量和全量備份,在季度備份檢查審計中,發現備份出來的庫大部分都不可用,因此最好是用svn本身提供的功能來進行備份。

優缺點分析:

==============

第一種svnadmin dump是官方推薦的備份方式,優點是比較靈活,可以全量備份也可以增量備份,並提供了版本恢復機制。

   缺點是:如果版本比較大,如版本數增長到數萬、數十萬,那麼dump的過程將非常慢;備份耗時,恢復更耗時;不利於快速進行災難恢復。

   個人建議在版本數比較小的情況下使用這種備份方式。

第二種svnadmin hotcopy原設計目的估計不是用來備份的,只能進行全量拷貝,不能進行增量備份;

優點是:備份過程較快,災難恢復也很快;如果備份機上已經搭建了svn服務,甚至不需要恢復,只需要進行簡單配置即可切換到備份庫上工作。

缺點是:比較耗費硬盤,需要有較大的硬盤支持(俺的備份機有1TB空間,呵呵)。

第三種svnsync實際上是製作2個鏡像庫,當一個壞了的時候,可以迅速切換到另一個。不過,必須svn1.4版本以上才支持這個功能。

   優點是:當製作成2個鏡像庫的時候起到雙機實時備份的作用;

   缺點是:當作爲2個鏡像庫使用時,沒辦法做到”r;想完全拋棄今天的修改恢復到昨晚的樣子”;而當作爲普通備份機制每日備份時,操作又較前2種方法麻煩。   

下面具體描述這三種的備份的方法:

===============

1、svnadmin dump備份工具

------------------------

這是subversion官方推薦的備份方式。

1)定義備份策略:

   備份頻度:每週六進行一次全量備份,每週日到週五進行增量備份

   備份地點:備份存儲路徑到/home/backup/svn/

   備份命名:全量備份文件名爲:weekly_fully_backup.yymmdd,增量備份文件命名爲:daily-incremental-backup.yymmdd

   備份時間:每晚21點開始

   備份檢查:每月末進行svnadmin load恢復試驗。

2)建立全量備份腳本:

   在~/下建立一個perl腳本文件,名爲weekly_backup.pl,執行全量備份,並壓縮備份文件,代碼如下(本代碼只針對一個庫的備份,如果是多個庫請做相應改動):

   

#!/usr/bin/perl -w

my $svn_repos="/home/svn/repos/project1";

my $backup_dir="/home/backup/svn/";

my $next_backup_file = "weekly_fully_backup.".`date +%Y%m%d`;

$youngest=`svnlook youngest $svn_repos`;

chomp $youngest;

print "Backing up to revision $youngestn";

my $svnadmin_cmd="svnadmin dump --revision $youngest $svn_repos >$backup_dir/$next_backup_file";

`$svnadmin_cmd`;

open(LOG,">$backup_dir/last_backed_up"); #記錄備份的版本號

print LOG $youngest;

close LOG;

#如果想節約空間,則再執行下面的壓縮腳本

print "Compressing dump file...n";

print `gzip -9 $backup_dir/$next_backup_file`;

   3)建立增量備份腳本:

在全量備份的基礎上,進行增量備份:在~/下建立一個perl腳本文件,名爲:daily_backup.pl,代碼如下:

#!/usr/bin/perl -w

my $svn_repos="/home/svn/repos/project1";

my $backup_dir="/home/backup/svn/";

my $next_backup_file = "daily_incremental_backup.".`date +%Y%m%d`;

open(IN,"$backup_dir/last_backed_up");

$previous_youngest = <IN>;

chomp $previous_youngest;

close IN;

$youngest=`svnlook youngest $svn_repos`;

chomp $youngest;

if ($youngest eq $previous_youngest)

{

   print "No new revisions to backup.n";

   exit 0;

}

my $first_rev = $previous_youngest + 1;

print "Backing up revisions $youngest ...n";

my $svnadmin_cmd = "svnadmin dump --incremental --revision $first_rev $youngest $svn_repos > $backup_dir/$next_backup_file";

`$svnadmin_cmd`;

open(LOG,">$backup_dir/last_backed_up"); #記錄備份的版本號

print LOG $youngest;

close LOG;

#如果想節約空間,則再執行下面的壓縮腳本

print "Compressing dump file...n";

print `gzip -g $backup_dir/$next_backup_file`;

4)配置/etc/crontab文件

配置 /etc/crontab 文件,指定每週六執行weekly_backup.pl,指定週一到週五執行daily_backup.pl;

具體步驟俺就不囉嗦了.

5)備份恢復檢查

在月底恢復檢查中或者在災難來臨時,請按照如下步驟進行恢復:恢復順序從低版本逐個恢復到高版本;即,先恢復最近的一次完整備份 weekly_full_backup.071201(舉例),然後恢復緊挨着這個文件的增量備份 daily_incremental_backup.071202,再恢復後一天的備份071203,依次類推。如下:

user1>mkdir newrepos

user1>svnadmin create newrepos

user1>svnadmin load newrepos < weekly_full_backup.071201

user1>svnadmin load newrepos < daily_incremental_backup.071202

user1>svnadmin load newrepos < daily_incremental_backup.071203

....

如果備份時採用了gzip進行壓縮,恢復時可將解壓縮和恢復命令合併,簡單寫成:

user1>zcat weekly_full_backup.071201 | svnadmin load newrepos

user1>zcat daily_incremental_backup.071202 | svnadmin load newrepos

...

(這部分內容很多參考了《版本控制之道》)

   

2、svnadmin hotcopy整庫拷貝方式

-------------------------

svnadmin hotcopy是將整個庫都”r;熱”拷貝一份出來,包括庫的鉤子腳本、配置文件等;任何時候運行這個腳本都得到一個版本庫的安全拷貝,不管是否有其他進程正在使用版本庫。

因此這是俺青睞的備份方式。

   1)定義備份策略

備份頻度:每天進行一次全量備份,

備份地點:備份目錄以日期命名,備份路徑到 /home/backup/svn/${mmdd}

備份保留時期:保留10天到15天,超過15天的進行刪除。

備份時間:每晚21點開始

備份檢查:備份完畢後自動運行檢查腳本、自動發送報告。

   2)建立備份腳本

   在自己home目錄 ~/下創建一個文件,backup.sh:

#!/bin/bash

SRCPATH=/home/svn/repos/; #定義倉庫parent路徑

DISTPATH=/home/backup/svn/`date +%m%d`/ ; #定義存放路徑;

if [ -d "$DISTPATH" ]

then

else

mkdir $DISTPATH

chmod g+s $DISTPATH

fi

echo $DISTPATH

svnadmin hotcopy $SRCPATH/Project1 $DISTPATH/Project1 >/home/backup/svn/cpreport.log 2>&1;

svnadmin hotcopy $SRCPATH/Project2 $DISTPATH/Project2

cp $SRCPATH/access   $DISTPATH; #備份access文件

cp $SRCPATH/passwd   $DISTPATH; #備份passwd文件

perl /home/backup/svn/backup_check.pl #運行檢查腳本

perl /home/backup/svn/deletDir.pl   #運行刪除腳本,對過期備份進行刪除。

   3)建立檢查腳本

   在上面指定的地方/home/backup/svn/下建立一個perl腳本:backup_check.pl

備份完整性檢查的思路是:對備份的庫運行 svnlook youngest,如果能正確打印出最新的版本號,則表明備份文件沒有缺失;如果運行報錯,則說明備份不完整。我試過如果備份中斷,則運行svnlook youngest會出錯。

   perl腳本代碼如下:

#! /usr/bin/perl

## Author:xuejiang

## 2007-11-10

## http://www.scmbbs.com

use strict;

use Carp;

use Net::SMTP;

#### defined the var #######

my $smtp =Net::SMTP->new('mail.scmbbs.com', Timeout => 30, Debug => 0)|| die "cann't connect to mail.scmbbs.comn";

my $bkrepos="/home/backup/svn/".&get_day;#定義備份路徑

my $ssrepos="http://www.scmbbs.com/repos";#定義倉庫url

my @repos = ("project1","project2");

my $title="echo "如下是昨晚備份結果與真實庫對比的情況,如果給出備份版本數,則表示備份成功;如果給報錯信息或沒有備份版本數,則表示備份失敗:" >./report";

system $title   || die "exec failedn";

foreach my $myrepos(@repos)

{

my $bkrepos1=$bkrepos."/".$myrepos;

   my $ssrepos1=$ssrepos."/".$myrepos;

   my $svnlookbk1 = "echo "$myrepos 昨晚備份的版本是:">>./report;svnlook youngest ".$bkrepos1." >> ./report 2>&1";

   my $svnlookss1 = "echo "$myrepos 真實庫中的最新版本及最後修改時間是:">>./report;svn log -r'HEAD' ".$ssrepos1." >> ./report 2>&1";

   system $svnlookbk1 || die "exec failedn";

   system $svnlookss1 || die "exec failedn";

}

my $body    ="echo "=========================================================================" >>./report";

my $bottom     ="echo "備份位置:來自http://www.scmbbs.com的".$bkrepos."" >>./report";

system $body    || die "exec failedn";

system $bottom     || die "exec failedn";

###### report the result ####

open(SESAME,"./report")|| die "can not open ./report";

my @svnnews = <SESAME>;

close(SESAME);

foreach my $line1 (@svnnews)

{

   print $line1."n";

}

my @email_addresses =("[email protected]","[email protected]","[email protected]");

my $to              = join(', ', @email_addresses);

$smtp->mail("[email protected]");

$smtp->recipient(@email_addresses);

$smtp->data();

$smtp->datasend("Toton");

$smtp->datasend("From: [email protected]");

$smtp->datasend("Subject:svn備份檢查報告".&get_today."n");

$smtp->datasend("Reply-to:[email protected]");

$smtp->datasend("@svnnews");

$smtp->dataend();

$smtp->quit;

#############

sub get_today

{

my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );

$year += 1900;

$month++;

my $today = sprintf( "%04d%02d%02d", $year, $month, $day);

return $today;

}

sub get_day

{

my( $sec, $min, $hour, $day, $month, $year ) = localtime( time() );

$year += 1900;

$month++;

my $today = sprintf( "%02d%02d", $month, $day);

return $today;

}

   4)定義刪除腳本

由於是全量備份,所以備份不宜保留太多,只需要保留最近10來天的即可,對於超過15天曆史的備份基本可以刪除了。

在/home/backup/svn/下建立一個perl腳本:deletDir.pl

(注意,刪除svn備份庫可不像刪除普通文件那麼簡單)

5)修改/etc/crontab 文件

在該文件中指定每晚21點執行”r;backup.sh”腳本。

 

3、svnsync備份

-----------------------

    

   使用svnsync備份很簡單,步驟如下:

1)在備份機上創建一個空庫:

svnadmin create svnbackup

2)更改該庫的鉤子腳本pre-revprop-change(因爲svnsync要改這個庫的屬性,也就是要將源庫的屬性備份到這個庫,所以要啓用這個腳本):

   cd SMP/hooks;

   cp pre-revprop-change.tmpl pre-revprop-change;

   chmod 755 pre-revprop-change;

   vi pre-revprop-change;

   將該腳本後面的三句註釋掉,或者乾脆將它弄成一個空文件

3)初始化,此時還沒有備份任何數據:

svnsync init file:///home/backup/svn/svnsync/svnbackup/   http://svntest.subversion.com/repos/svnbackup

   語法是:svnsync init {你剛創建的庫url} {源庫url}

   注意本地url是三個斜槓的:///

4)開始備份(同步):

   svnsync sync file:///home/backup/svn/svnsync/svnbackup

5)建立同步腳本

   備份完畢後,建立鉤子腳本進行同步。在源庫/hooks/下建立/修改post-commit腳本,在其中增加一行,內容如下:

/usr/bin/svnsync sync   --non-interactive file:///home/backup/svn/svnsync/svnbackup

   你可能已經注意到上面的備份似乎都是本地備份,不是異地備份。實際上,我是通過將遠程的備份機mount(請參閱mount命令)到svn服務器上來實現的,

邏輯上看起來是本地備份,物理上實際是異地備份。

轉載自:http://hi.baidu.com/it198/blog/item/69c407d1e5ca7bda572c8429.html

 

 

 

 

 

 

 

 

 

 

--------------------------------------------------------------------------------

Subversion獨立服務和與apache整合服務。

1、Svn獨立服務安裝

操作系統: Redhat Linux AS3  AS 4   ContOS AS 4

安裝包獲取:

下載[url]http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz[/url]和[url]http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz[/url]。

編譯:

以root用戶登錄。

將subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz傳到服務器。

tar xfvz subversion-1.4.0.tar.gz

tar xfvz subversion-deps-1.4.0.tar.gz

subversion-deps包有四個目錄zlib apr apr-util neon這四個目錄都是依賴包,編譯subversion所必須的代碼

cd subversion-1.4.0

./configure &endash;prefix=/opt/svn &endash;without-berkeley-db &endash;with-zlib

(注:以svnserve方式運行,不加apache編譯參數。以fsfs格式存儲版本庫,不編譯berkeley-db)

make clean

make

make install

vi /etc/profile,在/etc/profile最後加入:

PATH=$PATH:/opt/svn/bin

export PATH

測試:

svnserve &endash;version

如果顯示如下,安裝成功:

svnserve, version 1.4.0 (r21228)

compiled Oct 12 2006, 10:18:56

Copyright (C) 2000-2006 CollabNet.

Subversion is open source software, see [url]http://subversion.tigris.org/[/url]

This product includes software developed by CollabNet ([url]http://www.Collab.Net/[/url]).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

2. svn配置

建立版本庫目錄,可建多個:

mkdir -p /opt/svndata/repos1

mkdir -p /opt/svndata/repos2

建立版本庫:

svnadmin create /opt/svndata/repos1

svnadmin create /opt/svndata/repos2

修改版本庫配置文件:

版本庫1:

vi /opt/svndata/repos1/conf/svnserve.conf

內容修改爲:

[general]

anon-access = none

auth-access = write

password-db = /opt/svn/conf/pwd.conf

authz-db = /opt/svn/conf/authz.conf

realm = repos1

版本庫2:

vi /opt/svndata/repos2/conf/svnserve.conf

內容修改爲:

[general]

anon-access = none

auth-access = write

password-db = /opt/svn/conf/pwd.conf

authz-db = /opt/svn/conf/authz.conf

realm = repos2

即除realm = repos2外,其他與版本庫1配置文件完全相同。如果有更多的版本庫,依此類推。

配置允許訪問的用戶:

vi /opt/svn/conf/pwd.conf

爲了簡化配置,2個版本庫共用1個用戶配置文件。如有必要,也可以分開。

注意:對用戶配置文件的修改立即生效,不必重啓svn。

文件格式如下:

[users]

<用戶1> = <密碼1>

<用戶2> = <密碼2>

其中,[users]是必須的。下面列出要訪問svn的用戶,每個用戶一行。示例:

[users]

alan = password

king = hello

配置用戶訪問權限:

vi /opt/svn/conf/authz.conf

爲了簡化配置,3個版本庫共用1個權限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分開。文件中定義用戶組和版本庫目錄權限。

注意:

* 權限配置文件中出現的用戶名必須已在用戶配置文件中定義。

* 對權限配置文件的修改立即生效,不必重啓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]

admin = alan

[/]

@admin = rw

[repos1:/abc/aaa]

king = rw

[repos2:/pass]

king =

刪除無用文件:

rm /opt/svndata/repos1/conf/authz

rm /opt/svndata/repos1/conf/passwd

rm /opt/svndata/repos2/conf/authz

rm /opt/svndata/repos2/conf/passwd

3. 啓動svn

建立啓動svn的用戶:

useradd svn

passwd svn

根據提示爲用戶svn設置密碼

允許用戶svn訪問版本庫:

chown -R svn:svn /opt/svndata

chown -R svn:svn /opt/data

啓動svn:

su - svn -c ”r;svnserve -d &endash;listen-port 9999 -r /opt/svndata”

其中:

su - svn表示以用戶svn的身份啓動svn

-d表示以daemon方式(後臺運行)運行

&endash;listen-port 9999表示使用9999端口,可以換成你需要的端口。但注意,使用1024以下的端口需要root權限

-r /opt/svndata指定根目錄是/opt/svndata

檢查:

ps -ef|grep svnserve

如果顯示如下,即爲啓動成功:

svn    6941   1 0 15:07 ?    00:00:00 svnserve -d &endash;listen-port 9999 -r /opt/svndata

 

二、svn服務與apache 整合

Subversion存儲方式,一是Berkeley DB伯克利存儲方式,二是fsfs存儲方式。兩種版本庫數據存儲對照表特性 Berkeley DB FSFS

對操作中斷的敏感 很敏感;系統崩潰或者權限問題會導致數據庫”r;塞住”,需要定期進行恢復。 不敏感

可只讀加載 不能 可以

存儲平臺無關 不能 可以

可從網絡文件系統訪問 不能 可以

版本庫大小 稍大 稍小

擴展性:修訂版本樹數量 無限制 某些本地文件系統在處理單一目錄包含上千個條目時會出現問題。

擴展性:文件較多的目錄 較慢 較慢

檢出最新代碼的速度 較快 可以

大量提交的速度 較慢,但時間被分配在整個提交操作中 較快,但最後較長的延時可能會導致客戶端操作超時

組訪問權處理 對於用戶的 umask 設置十分敏感,最好只由一個用戶訪問。 對 umask 設置不敏感

功能成熟

 

1、安裝APR-1.2.7和APR-util-1.2.7

    下載地址:[url]http://apr.apache.org/ [/url]   

    tar zxvf  apr-1.2.7.tar.gz

   ./configure

    make

    make install

 

我下載的是tar.bz2格式的,用上面的方法解壓失敗。經研究,解決方法如下:

z用來解壓.tar.gz的文件,.tar.bz2的文件得換成j,象這樣:

tar   -xjvf   linux-2.6.20.tar.bz2

看看參數說明:

x:解壓

j:bz2

f:指定文件

這個包不行,不過學了一種解壓的方法也算有收穫

 

 

 

    tar zxvf apr-util-1.2.7.tar.gz

    ./configure --with-apr=/usr/local/apr/

     make

     make install

2、編譯安裝APACHE。

    tar zxvf httpd-2.2.3.tar.gz

    cd httpd-2.2.3

   ./configure --prefix=/opt/apache --enable-dav --enable-so --enable-maintainer-mode --with-apr=/usr/local/apr/bin/apr-1-config --with-apr-util=/usr/local/apr/bin/apu-1-config

     make

     make install

3、安裝subversion-1.4.0

     tar zxvf subversion-1.4.0.tar.gz

    ./configure --with-apxs=/opt/apache/bin/apxs --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr

問題:有關共享庫錯誤方法:  echo "/usr/local/apr-util/lib" >> /etc/ld.so.c            ldconfig      echo $?

    make

    make install

   設置環境變量(可做可不做)vi /etc/profile,在/etc/profile最後加入:

PATH=$PATH:/opt/svn/bin

export PATH

4、查看subversion兩個動態庫有沒有安裝成功

     vi /opt/apache/conf/httpd.conf

    看到下面兩個模塊說明安裝成功

     LoadModule dav_svn_module     modules/mod_dav_svn.so

     LoadModule authz_svn_module   modules/mod_authz_svn.so

5、配置SVN

    vi /opt/apache/conf/httpd.conf

     配置:

    <Location /svn>

       DAV svn

        SVNParentPath /data/svn/repos //svn父目錄

        AuthType Basic //連接類型設置

        AuthName "Subversion repository" //連接框提示

        AuthUserFile /data/svn/passwd //用戶配置文件

        AuthzSVNAccessFile /data/svn/auth

        Require valid-user //passwd所有的用戶都可以訪問  </Location>

6、建立SVN存儲倉庫

     #mkdir -p /opt/svndata/repos

    #svnadmin create &endash;fs-type fsfs /opt/svndata/repos

備份以前的SVN庫

#svnadmin dump /opt/svndata/repos > /root/repos20080328

把備份出來的數據恢復到本地

#svnadmin load /opt/svndata/repos/ < /root/repos20080328

7、建立本地訪問控制文件#/opt/apache/bin/htpasswd [-c] /opt/passwd north

//第一次設置用戶時使用-c表示新建一個用戶文件。#/opt/apache/bin/htpasswd passwd 用戶名(加入新的用戶)

8、建立本地項目控制文件

    touch /opt/svndata/auth

    文件內容爲:

[groups]

[repos1:/]

#wxy = rw

north = rw

tom = rw

[repos2:/]

repos2 = rw

9、安裝客戶端,訪問服務器

   [url]http://192.168.0.180:/svn/jishu[/url]

   注意:SVN是APACHE配置的時候加上去的。

10、到此安裝基本結束

     修改一下/data/svn/repos屬性,否則會導致文件上傳失敗。

     chmod -R apache.apache repos

三、日常維護命令和參數

 

linux下啓動svn

啓動svn

1、指定端口

啓動svn服務svnserve -d --listen-port 20000 -r /opt/svndata

 2、不指定端口

[root@localhost conf]# svnserve -d -r /var/svnroot

 

 

創建版本庫svnadmin create fs-type fsfs /opt/svndata/mark

 

查看版本庫的信息svn list  file:///opt/svndata/marksvn list --verbose file:///opt/svndata/mark

導入庫的目錄結構svn import /tmp/mark/ file:///opt/svndata/mark/ --message "init" (文件夾mark下有bo)

 

刪除版本庫mark下文件夾bosvn delete svn://192.168.0.180:20000/opt/svndata/mark/bo -m "delete "

 

//導出$svnlook youngest oldrepo$svnadmin dump oldrepo >; dumpfile

//還原$svnadmin load newrepo < dumpfile

 

停止subversion服務

ps &endash;aux | grep svnserve

殺掉進程

kill -9 ID號

 

 

 

 

 

========================可以把svn加爲系統服務===================================================================================

建立 autoRunSVN.bat文件,內容是: sc create MySVNServer binpath= "/"C:/Program FilesSubversion/svnserve/svnserve/" --service -r H:/homerepos" displayname= "SVNService" depend= Tcpip start= auto pause

  留心之處:

  (1)sc是windows自帶的服務配置程序,MySVNServer 是服務的名稱,似乎沒什麼用。

  (2)參數binPath示意 svnserve可執行文件的安裝路徑,由於路徑中的"Program Files"帶有空格,因此整個路徑須要用雙引號惹起來。而雙引號本身是個特殊字符,須要執行 轉移,因此在路徑前後的兩個雙引號都須要寫成/" 。

  (3)--service參數示意以windows服務的形式運行,--r指明svn repository的位置,service參數與r參數都作爲binPath的一部分,因此與svnserve.exe的路徑一起被包含在一對雙引號當中,而這對雙引號不須要執行 轉義。

  (4)displayname示意在windows服務列表中顯示的名字, depend =Tcpip 示意 svnserve服務的運行須要 tcpip服務,start=auto示意開機後自動運行。安裝服務後,svnserve要等下次開機時纔會自動運行。

  (5)binPath的等號前面無空格,等號後面有空格 displayname depend start也都一樣 service前面是--,不是- ,而r前面是-

  (6)若要卸載svn服務,則執行 sc delete svnserve 即可。

  (7)從”r;sc”到”r;auto”是在同一個命令sc,必須寫在同一行。 建立成功後,能夠在運行中鍵入service.msc察看系統服務,找到SVNService項,查看這項服務的屬性,能夠運用 Windows提供的界面操作SVNService服務了。

  也能夠運用命令行啓動、停止服務。

  •   啓動服務: C:/>net start svnservice  服務正在啓動 . SVNService 服務已經啓動成功。 最後面的是服務名

  •   停止服務: C:/>net stop svnservice  服務正在停止. SVNService 服務已成功停止。

  刪除建立的服務 C:/>sc delete svn svnservice

 

 

 

===========================配置apache通過http訪問svn===========================================================================

 1. 引言

2. 安裝過程

2.1. 安裝Apache

2.2. 安裝Subversion

2.3. 配置

2.4. 使用SSL來保護你的服務器

 

摘要

本文是TortoiseSVN1.3.5幫助中關於配置服務器一節的翻譯,根據行文需要做了一些調整與增減。英文原文參見TortoiseSVN1.3.5幫助的3.1. Apache Based Server。

要使用TortoiseSVN(或者其它的Subversion客戶端),你要有一個存放版本庫的地方。你可以將版本庫存放在本機,使用file://協議來訪問,也可以將它們放在一個

服務器上,使用http://或svn://協議來訪問。兩種服務器協議(http://和svn://)也可以被加密成https://及svn+ssh://。下面將一步一步地爲你展示如何在windows上配置

這樣一個服務器。

如果你沒有服務器或者你只想單獨地工作,那麼將版本庫存放在本機並使用file://協議來訪問是你最好的選擇,這樣的話,你可以略過本文。

注:目前windows下的subversion有專門的for apache2.2.x版本,可以跟Apache2.2.x配合,不過本文所帶的附件只在Apache2.0.x上測試過

 

1. 引言

在所有的Subversion服務器配置方式中,基於Apache的是最靈活的。雖然配置起來有一點點複雜,但是它提供了其它方式所沒有的好處:

WebDAV

基於Apache配置的Subversion服務器使用了被許多其它程序支持的WebDAV協議。舉個例子,你可以在Windows的資源管理器中將這樣的一個版本庫掛載成一個

”r;Webfolder”,然後像文件系統中的其它文件夾一樣訪問它。

瀏覽版本庫

你可以在不安裝Subversion客戶端的情況下,使用瀏覽器來瀏覽版本庫中的內容。這將使得更大範圍的用戶可以訪問你的數據。

用戶驗證

你可以使用任何Apache支持的驗證機制,包括SSPI和LDAP。

安全

Apache是非常的穩定和安全,因此你的版本庫自然而然地擁有同樣的安全性。包括SSL加密。

 

2. 安裝過程

2.1. 安裝Apache

安裝Apache前,你要有一臺運行Windows2000、Windows XP + sp1或Windows2003的電腦。

警告:請注意,沒安裝Service Pack 1的Windows XP將導致錯誤的網絡數據從而破壞你的版本庫!

從http://httpd.apache.org/download.cgi最新版本的Apache Web服務器。確保你下載的版本大於2.0.54。2.0.54版本的Apache將不能與Subversion 1.3.xx配合工作。而且,小於2.0.54的Apache也因爲在windows上的編譯存在一個bug而導致不能與subversion1.2配合使用。

一旦你已經有了Apache2的安裝程序,你可以雙擊它,它將引導你完成整個安裝過程。請確保你輸入正確的服務器URL(如果你的服務器沒有DNS名稱,你可以直接輸入IP地址)。我建議你將Apache安裝成 for all Users,on Port 80,as a service。注意:如果你已經有一個IIS或者其它的程序使用80端口,安裝可能會失敗。如果是這樣,你可以到程序目錄下的Apache Group/Apache2/conf目錄中找到文件httpd.conf,將其中的Listen 80改成一個不用的端口,比如Listen 81。然後重新運行這個安裝程序,這次應該不會再有問題了。

現在你可以在你的瀏覽器中鍵入http://loccalhost,如果呈現了一個已經配置好的網站,那麼你的Apache就安裝成功了。

警告:

如果你將Apache安裝成一個服務,它將以本地system帳戶來運行。爲Apache創建一個單獨的用戶來運行它將會更安全一些。

請確保運行Apache的用戶有版本庫的完全訪問權限(右鍵版本庫目錄->屬性->安全)。要不然,用戶將無法提交他們的更改。

就算Apache以本機system來運行,你也要設置它能完全讀寫版本庫目錄。

如果沒有爲Apache配置這個許可,用戶將會得到"禁止訪問"的錯誤信息,在Apache的錯誤日誌中表現爲錯誤500。

 

注意:

  • 安裝的不是apache_tomcat,是apache。因爲前者不全,缺少一些模塊和配置文件。

  • 如果機器上配置了iis或tomcat,一定要先停止或修改掉80端口,否則會因衝突而無法啓動。

 

2.2. 安裝Subversion

從http://subversion.tigris.org/ser ... entList?folderID=91(英文)

http://bbs.iusesvn.com/forum-7-1.html(中文)下載最新版本的Subversion。

運行Subversion安裝程序,如果安裝程序能夠識別你已經安裝了Apache,那麼你的安裝基本上就OK了。如果它不能,那麼你要做一些額外的步驟。

注:如果你先安裝Apache,再安裝Subversion,正常情況下下面的工作(2.3配置前)Subversion安裝程序已經幫你完成了

使用資源管理器,

  • 進入Subversion的安裝目錄(通常爲c:/program files/Subversion),

  • 找到文件httpd/mod_dav_svn.so和mod_authz_svn.so,將它們拷貝到Apache的modules目錄(通常爲c:/program files/apache group/apache2/modules)。

  • 從Subversion的安裝目錄拷貝文件libdb43.dll到Apache的modules目錄。

  • 使用如記事本之類的文本編輯器編輯Apache的配置文件(通常爲c:/program files/apache group/apache2/conf/httd.conf),修改以下內容:

去掉以下行的註釋(將開頭的#刪除):

#LoadModule dav_fs_module modules/mod_dav_fs.so

#LoadModule dav_module modules/mod_dav.so

 

在LoadModule節的最後添加以下兩行:

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

 

2.3. 配置

現在,你已經安裝了Apache和Subversion,但是Apache還不知道如果處理像TortoiseSVN一樣的Subversion客戶端。要讓Apache知道哪個URL將被Subversion使用,

你要像下面這樣

 

編輯Apache的配置文件(通常在c:/program files/apache group/apache2/conf/httpd.conf):

在配置文件的最後添加下面這些行:

 

<Location /svn> 域名後的訪問路徑

DAV svn

SVNParentPath "E:/svnroot"   是庫的上一級目錄,比如庫在E:/svnroot/java-source,那麼父目錄就是"E:/svnroot"

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile "C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd"  用Apache2.2/bin/htpasswd -c passwd 用戶名生成的認證文件,密碼經md5加密

AuthzSVNAccessFile "E:/svnroot/java-source/conf/authz"  訪問權限使用svn的權限文件,在調試階段可註釋掉

#AuthzSVNAccessFile "E:/svnroot/dotnet-source/conf/authz"

#AuthzSVNAccessFile "E:/svnroot/vc-source/conf/authz"             我試過了,像這樣配置多個權限文件是不可以的,同一時間只能有一個

Require valid-user    訪問權限啓用,在調試階段可註釋掉

#Satisfy Any              調試階段使用這句代替上面一行

</Location>

 

如果是多個庫就一定要有多個location,如下

<Location /svn1>

DAV svn

SVNParentPath "E:/svnroot"

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile "C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd"

AuthzSVNAccessFile "E:/svnroot/java-source/conf/authz"

Require valid-user

</Location>

 

<Location /svn2>

DAV svn

SVNParentPath "E:/svnroot"

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile "C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd"

AuthzSVNAccessFile "E:/svnroot/dotnet-source/conf/authz"

Require valid-user

</Location>

 

<Location /svn3>

DAV svn

SVNParentPath "E:/svnroot"

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile "C:/Program Files/Apache Software Foundation/Apache2.2/bin/passwd"

AuthzSVNAccessFile "E:/svnroot/vc-source/conf/authz"

Require valid-user

</Location>

可以看到,如果多個庫,那麼需要不同的上下文,使用相同的上下文的話只有最後一個起作用。

權限文件和口令文件可以指向不同的或者是同一個。

 

注意:

所有參數一定要加雙引號,否則會報錯。

 

  • AuthUserFile : Apache2.2/bin/htpasswd -c passwd songyc      會提示輸入兩次口令

查看passwd內容:

songyc:$apr1$GsZgx4UC$QDf1cgNn2E3ZoJJDVeQMe.

 

  • AuthzSVNAccessFile:E:/svnroot/java-source/conf/authz

查看authz內容:

[aliases]

# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average

[groups]

admin_group=admin,tangzhigang,songyc

java_group=admin,wangyc,zhaoyue,yanjian,songyc

dot_group=admin,wangyou,luochunlin,liufujian,wangyongkui,songyc

others_group=admin,zhanghuan,caiyujie,suping,zhoujianfeng,test,songyc

[java-source:/]

@java_group = rw

* = r

# [/foo/bar]

# harry = rw

# &joe = r

# * =

# [repository:/baz/fuz]

# @harry_and_sally = rw

# * = r

 

這樣配置表示:你所有的版本庫將位於D:/SVN目錄下,要訪問你的版本庫可以使用這樣的URL:http://MyServer/svn/,訪問權限將由passwd文件中的用戶名/密碼來限制。

要創建passwd文件,可以打開命令行(DOS窗口),將當前目錄切換到apache2目錄(通常爲c:/program files/apache group/apache2),然後打入以下命令以創建文件:

bin/htpasswd -c passwd <username>

此命令執行bin目錄下的htpasswd.exe來創建一個密碼文件,重啓Apache服務。

將你的瀏覽器指向http://MyServer/svn/MyNewRepository(MyNewRepository是你之前創建的Subversion版本庫)。如果一切正常,你將被提示輸入用戶名密碼,輸入正確的用戶名密碼後你就可以看到版本庫中的內容了。

對你剛剛輸入的apache配置作一些簡短的說明:

<Location /svn>

意味着可以通過像這樣的URL(http://MyServer/svn)來訪問Subversion版本庫

DAV svn

告訴Apache哪個模塊負責服務像那樣的URL--在這裏就是Subversion模塊

SVNListParentPath on

在Subversion 1.3及更高版本中,這個指示器使得Subversion列出由SVNParentPath指定的目錄下所有的版本庫

SVNParentPath D:/SVN

告訴Subversion在目錄D:/SVN下尋找版本庫

AuthType Basic

啓用基本的驗證,比如用戶名/密碼對

AuthName "Subversion repositories"

當一個驗證對話框彈出時,告訴用戶這個驗證是用來做什麼的

AuthUserFile D:/passwd

指定D:/passwd用爲密碼文件用來驗證用戶的用戶名及密碼

AuthzSVNAccessFile D:/svnaccessfile

指定D:/svnaccessfile來限定各個用戶或組在版本庫中目錄的訪問權限

Require valid-user

限定用戶只有輸入正確的用戶名及密碼後才能訪問這個路徑

上面的配置僅僅是一個簡單的示例。你還可以對Apache進行許許多多的配置。

1如果你想讓所有用戶對版本庫都有讀的權限而只有特定的用戶纔有寫的權限,你可以將這行

Require valid-user

改爲

 <LimitExcept GET PROPFIND OPTIONS REPORT>

Require valid-user

</LimitExcept>

2上面的配置使用了passwd文件將你所有的版本庫作爲一個單元來限定訪問權限。如果你想獲得更多的控制,如限定某個用戶可以訪問版本庫中的哪個目錄,可以把下面這行的#去掉:

#AuthzSVNAccessFile D:/svnaccessfile

然後用文本編輯器創建一個Subversion授權文件。Apache將確保只有有效的用戶可以訪問你的/svn位置,然後將用戶名傳到AuthzSVNAccessFile模塊,這樣可以依據Subversion授權

文件得到更精細的權限控制。注意,路徑將被指定爲[庫:路徑]或者簡單的[路徑]。如果你不明確指定一個庫,訪問規則將應用到由SVNParentPath指定的目錄下所有的版本庫中。一個

授權文件例子可能像這樣:

[groups]

admin = john, kate

devteam1 = john, rachel, sally

devteam2 = kate, peter, mark

docs = bob, jane, mike

training = zak

 

# 爲所有庫指定默認訪問規則

# 所有人可以讀,管理員可以寫,危險分子沒有任何權限

[/]

* = r

@admin = rw

dangerman =

 

# 允許開發人員可以完全訪問他們的項目版本庫

[proj1:/]

@devteam1 = rw

[proj2:/]

@devteam2 = rw

[bigproj:/]

@devteam1 = rw

@devteam2 = rw

trevor = rw

 

# 文檔編寫人員對所有的docs目錄有寫權限

[/trunk/doc]

@docs = rw

 

# 培訓人員可以完全訪問培訓版本庫

[TrainingRepos:/]

@training = rw

2.4. 使用SSL來保護你的服務器

以上的工作已經可以讓你的svn服務器正常工作了。

如果你要更安全一些,可以配置ssl來保護你的服務器。

因爲美國出口限制,默認安裝的Apache服務器不支持SSL。但是你自己可以很容易地在其它地方下載到所需要的模塊,然後安裝它。

首先你需要SSL的必需文件。你可以http://hunter.campbus.com/或這裏找到相應的軟件包

然後只要將包解開將其中的mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、conf/ssl.conf拷到conf目錄。

在Apache的conf目錄中用文本編輯器打開ssl.conf。

將下面這些行用#註釋掉:

然後只要將包解開將其中的mod_ssl.so拷到Apache的modules目錄、openssl.exe、libeay32.dll、ssleay32.dll拷到bin目錄、conf/ssl.conf拷到conf目錄。

在Apache的conf目錄中用文本編輯器打開ssl.conf。

將下面這些行用#註釋掉:

修改 SSLCertificateFile conf/ssl.crt/server.crt

爲 SSLCertificateFile conf/ssl/my-server.cert

修改 SSLCertificateKeyFile conf/ssl.key/server.key

爲 SSLCertificateKeyFile conf/ssl/my-server.key

修改 SSLMutex file:logs/ssl_mutex

爲 SSLMutex default

刪除以下兩行(如果有): <IfDefine SSL>

</IfDefine>

打開Apache配置文件(httpd.conf),去掉這行的註釋 #LoadModule ssl_module modules/mod_ssl.so

Openssl需要一個配置文件。你可以從這裏下載一個可工作的版本Openssl需要一個配置文件。你可以從這裏下載一個可工作的版本http://tud.at/programm/openssl.cnf

 

將它保存到bin/openssl.cnf。

下面你要創建一個SSL證書。你可以打開一個命令行窗口,然後cd到Apache安裝目錄(比如C:/program files/apache group/apache2),敲入以下命令: bin/openssl req -config bin/openssl.cnf -new -out my-server.csr

你將被問及一句口令短語。請注意,不要使用簡單的幾個詞,而應該輸入一整個句子,比如一篇詩詞的一部份,越長越好。同樣,你還要輸入你的服務器URL。然後

其它的問題都是可選問答的,不過我建議你也將它們填充。

下一步,敲入以下命令: bin/openssl rsa -in privkey.pem -out my-server.key

以及(注意,只有一行) bin/openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000

這樣將創建一個4000天后才過期的證書。最後敲入: bin/openssl x509 -in my-server.cert -out my-server.der.crt -outform DER

這些命令在Apache目錄下創建了一些文件(my-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。將這些文件拷貝到目錄conf/ssl

(比如C:/program files/apache group/apache2/conf/ssl),如果目錄ssl不存在,你必須先創建一個。

重啓Apache服務。

現在可以用類似這樣的url來訪問你的版本庫了https://servername/svn/project

強制通過SSL來訪問

當你配置了SSL來提高版本庫安全時,你可能想禁用無SSL的http訪問方式,而只允許通過https訪問。要達到這種效果,你要在<Location>塊加入另外一個指示器SSLRequireSSL。

一個示例<Location>塊可能像這樣:

<Location /svn>

DAV svn

SVNParentPath D:/SVN

SSLRequireSSL

AuthType Basic

AuthName "Subversion repositories"

AuthUserFile passwd

#AuthzSVNAccessFile svnaccessfile

Require valid-user

</Location>

 

 

注意:

如果遇到apache無法啓動的情況,可以用/$apache_home/bin/httpd -t 檢查httpd.conf是否存在語法錯誤

如果遇到瀏覽器訪問報forbidden,提示無訪問權限時,需檢查”r;SVNParentPath”,看是否指向的是庫的上一級目錄

 

 

 

 

 

1、創建庫

E:/svnroot>svnadmin create java-source-bak

 

 

2、創建鉤子腳本

E:/svnroot/java-source-bak/hooks>svnsync init file:///e:/svnroot/java-source-bak  http://10.150.132.140/svn1/java-source

svnsync: 此版本庫不允許修改版本屬性;請管理員創建 pre-revprop-change 鉤子

 

新的版本庫中找到hooks文件夾,在裏頭創建pre-revprop-change.bat鉤子腳本

       如:e:/svnroot/hooks/pre-revprop-change.bat

如果不建這個空的pre-revprop-change.bat會報"svnsync:此版庫不允許修改版本屬性;請管理員創建pre-revprop-change鉤子!

 

3、初始化

E:/svnroot/java-source-bak/hooks>svnsync init file:///e:/svnroot/java-source-bak

 http://10.150.132.140/svn1/java-source

認證領域: <http://10.150.132.140:80> Subversion repositories

”r;server”的密碼: *****                            這是系統用戶的口令

認證領域: <http://10.150.132.140:80> Subversion repositories

用戶名: songyc                                     版本庫的用戶

”r;songyc”的密碼: *****                           版本庫用戶的口令

複製版本 0 的屬性。

運行成功則會提示:複製版本 0 的屬性

 

4、執行同步

E:/svnroot/java-source-bak/hooks>svnsync sync file:///e:/svnroot/java-source-bak

認證領域: <http://10.150.132.140:80> Subversion repositories

”r;server”的密碼: *****

認證領域: <http://10.150.132.140:80> Subversion repositories

用戶名: songyc

”r;songyc”的密碼: *****

傳輸文件數據.

已提交版本 1。

複製版本 1 的屬性。

已提交版本 2。

複製版本 2 的屬性。

傳輸文件數據.....................

 

 

這樣我已經成功使用svnsync同步庫了。

  • 如果linux則用crontab創建自動同步的任務

  • 如果是windows,則可創建一個bat 然後建一個任務計劃

5、定時任務:

添加到任務計劃裏

開始-->程序-->附件-->系統工具-->任務計劃,設置爲系統啓動時運行

 

 

 

svn 命令行

 

取版本庫項目(最新)

1、先清空目錄

E:/test_svn_oper>rmdir /s /q data_mapping

2、取出工程

E:/test_svn_oper>svn checkout --username songyc --password ehong svn://10.150.132.140/java-source/data_mapping

 

給程序修訂版打標記(基線)

通常版本控制軟件都有實現打基線的功能。

而SVN又是如何來打基線呢,

其實SVN天生就可以根據一個修訂版本號檢出一個特定的修訂版本,只不過如果你不嫌麻煩你可以用一個excel記錄一下你當前發佈程序時其主目錄對應的修訂號。

這樣在需要的時候可以根據這個修訂號把當時的文檔檢出來。

但是通常在SVN上打基線還是通過”r;分支/標記”功能來實現的,在ecplise中的實現方式如下:

1。點擊"window->Open Perspective",選擇"SVN資源庫研究"。

2。在界面左邊部分的”r;SVN資源庫”中選擇要打基線的項目的根目錄,右擊鼠標,在彈出的菜單中選擇”r;分支/標記”。

3。在”r;到URL”中填寫你要把其基線打在什麼目錄,一般要改成其它目錄,然後點擊確定即可。

這樣操作後其實是產生了一個分支,這個過程並不耗費SVN服務器的存儲空間,因爲其只是類似於物理鏈接的方式創建了了個對應於當前修訂版本的鏈結,所以我們

可以每發一個版本就打一次基線而不用擔心SVN空間被耗光。

在下次需要用到該基線的時候只要把SVN中我們在上面第三步中填寫在”r;到URL”目錄檢出即可。

但是基線是不能修改的,體現在SVN中就是你從基線目錄中檢出的文件如果做了修改,再提交就變成了一個於原先項目不同的分支版本。

 

修改個別文件也要起一個新的目錄(新的基線)麼?

 

按標記(基線)取某一程序

 

 

 

 

 

1、獲取svn項目

 

1.1 取版本庫最新的

C:/Documents and Settings/server>svn checkout --username songyc --password ehong svn://10.150.132.140/java-source/data_mapping songyc ehong

A    ehong/java-source/ehongWebservice

A    ehong/java-source/ehongWebservice/.classpath

A    ehong/java-source/ehongWebservice/webapps

A    ehong/java-source/ehongWebservice/webapps/META-INF

A    ehong/java-source/ehongWebservice/webapps/META-INF/MANIFEST.MF

A    ehong/java-source/ehongWebservice/webapps/SOAPMonitorApplet.java

A    ehong/java-source/ehongWebservice/webapps/happyaxis.jsp

 

注意svn checkout 的一些參數

--revision (-r) REV,

--quiet (-q),

--non-recursive (-N),

--username USER,

--password PASS,

--no-auth-cache,

--non-interactive,

--config-dir DIR

 

1.2 按修訂版取

 svn checkout -r   修訂版字符串  --username songyc --password ehong svn://10.150.132.140/java-source songyc ehong

 

2、添加目錄或文件

將工作副本中的文件/目錄添加到存儲庫中:svn add

在您第一次在工作目錄中創建並編輯新文件後,可以將此文件添加到存儲庫中,或添加一個目錄,目錄中有無內容均可。

 

svn add FILENAME/DIR

這樣就會在您的工作副本中添加文件/目錄,並安排它們以添加到存儲庫中。您下次提交時,會上載這些文件/目錄,並將它們添加到存儲庫中。

如果您添加了內容,但在提交前又改變了主意,則可以使用 svn revert 取消添加內容的安排。

 

轉換:--targets FILENAME, --non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props

請參見添加文件/目錄示 例。

 

查看帶有修訂和作者信息的特定文件的內容:svn blame

若要在線查看指定文件的作者和修訂信息,請鍵入:

svn blame FILENAME

每行文本的開始處都以上次更改該行的作者(用戶名)和修訂版本號作爲批註。

轉換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

查看特定文件的內容:svn cat

有時,與存儲庫相比較,您的工作副本可能已過時;或者您可能已修改了本地工作副本。在這些情況下,在提交更改或決定編輯您的工作副本之前,您會 希望查看指定文件的內容差異。運行 svn cat FILENAME 將自動從存儲庫中取出 HEAD 修訂版本。這條子命令主要用於檢索具有較舊修訂版本號的文件,並將其顯示在屏幕上。通過在此站點上瀏覽項目源代碼,也可以執行相同的操作。

轉 換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

 

$svn add(添加一個目錄或文件。用法:先建一個文件或目錄,取名字爲foo 然後

  執行這個命令$svn add foo <foo爲文件或目錄>)

 

3、清理工作副本

名稱

svn cleanup &emdash; 遞歸清理工作拷貝。

概要

svn cleanup [PATH...][/pre]描述

遞歸清理工作拷貝,刪除未完成的工作拷貝鎖定,並恢復未完成的操作。如果你得到一個”r;工作拷貝已鎖定”的錯誤,運行這個命令可以刪除無效的鎖定,讓你的工作拷貝再次回到可用的狀態。

如果,因爲一些原因,運行外置的區別程序(例如,用戶輸入或是網絡錯誤)有時候會導致一個svn update失敗,使用--diff3-cmd選項可以完全清除你的外置區別程序所作的合併,你也可以使用--config-dir指定任何配置目錄,但是你應該不會經常使用這些選項。

別名

改變

工作拷貝2

是否訪問版本庫

選項

--diff3-cmd CMD

--config-dir DIR

[/pre]例子

svn cleanup沒有輸出,沒有太多的例子,如果你沒有傳遞PATH,會使用”r;.”。

$ svn cleanup

 

 

4、複製工作副本或存儲庫中的文件或目錄

複製工作副本或存儲庫中的文件或目錄:svn copy

在項目中,您可能需要用到過去的舊文檔。例如,您可能想要使用一個已存在的 HTML 文件,使用其代碼作爲參考以在創建新內容時保持產品外觀和感覺。創建文件時,您無需從頭開始,只需使用 svn copy 複製此文件,然後將其另存爲其它名稱並更改其內容。您可以從存儲庫將文件複製爲本地工作副本,也可以將本地工作副本複製回存儲庫文件。您還可以在本地工作 副本內部複製文件。Subversion 不支持在存儲庫之間進行復制。可使用 svn copy SRC DST 完成此操作。

轉換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR

請參見 svn copy。

$svn copy (複製。用法:$svn copy foo.c index.c)

 

 5、 從本地工作副本中刪除文件或目錄,當提交時,纔會在存儲庫中將該文件實際刪除

從本地工作副本中刪除文件或目錄:svn delete

您可能希望從本地工作副本中刪除不需要的文件。使用 svn delete FILENAME 可安排刪除文件。僅當您提交時,纔會在存儲庫中將該文件實際刪除。

轉換:--force, --force-log, --message (-m) TEXT, --file (-F) FILE, --quiet (-q), --targets FILENAME, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR

 

$svn delete(刪除一個目錄或文件。

用法:$svn delete foo   <foo爲文件或目錄>)

 

 

6、查看文件之間的差異

查看文件之間的差異:svn diff

可以使用 svn diff 顯示工作副本中的指定文件相對於存儲庫中相應文件所做的本地修改。在命令提示符處,請鍵入:

svn diff (文件的路徑) (項目存儲庫的 URL)

例如,若要將本地修改後的文件”r;index.html”與項目存儲庫中的相應文件進行比較,請鍵入:

svn diff $SRC/...../index.html https://(項目名稱).(域)/svn/(項目名稱)/trunk (項目名稱) --username [在此處輸入用戶名]

除此之外,您也可以轉到該文件所屬的目錄,並鍵入:

svn diff (FILENAME)

該命令將顯示差異,並且帶有修訂版本號。

轉換:--revision (-r) REV, --old OLD-TARGET, --new NEW-TARGET, --extensions (-x) "ARGS", --non-recursive (-N), --diff-cmd CMD, --notice-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --no-diff-deleted, --config-dir DIR

請參見檢查歷史、svn diff。

 

7、在本地計算機上導出空目錄樹

在本地計算機上導出空目錄樹:svn export

在您的本地計算機上,可以從項目存儲庫或本地工作副本內部提取一個無版本的副本,也稱爲空目錄樹。若要從存儲庫中獲得較舊修訂版本的空目錄,請 鍵入:

svn export [-r REV] [PATH]

該命令將從 URL 指定的存儲庫中的修訂版本 REV 位置(如果指定,否則從 HEAD 位置)將空目錄樹導出到 PATH。如省略 PATH,則該 URL 的最後一部分將用作本地目錄名稱。除此之外,您也可以在本地計算機內部,從一個工作副本(由 PATH1 指定)向另一工作副本(由 PATH2 指定)導出空目錄樹。這將保留所有的本地更改,但不會複製版本控制中的文件。若要執行此操作,請鍵入:

svn export PATH1 PATH2

轉換:--revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

獲取有關 Subversion 的幫助:svn help

 

Subversion 可以在命令行界面爲您提供幫助。

 

8、若要獲得有關特定子命令的幫助,

svn help [SUBCOMMAND...]

轉換:--version, --quiet (-q)

將您的更改提供給 SVN 存儲庫

對文件和/或目錄進行本地更改後,您必須向 SVN 存儲庫提交這些更改。

 

9、提交更改

若要向共享存儲庫提交您的更改,請鍵入:

svn commit

加備註提交

svn commit -m "請在此處鍵入您的理由"

如果您不包括對該文件更改的描述,系統將提示您調用文件編輯器添加描述,然後 svn 才能完成提交操作;否則將會出現”r;提交失敗”錯誤。所有的提交都會被自動記錄,併發布到項目的提交討論中。

轉換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --targets FILENAME, --force-log, --username USER, --password PASS, --no-auth-cache, --non-interactive, --encoding ENC, --config-dir DIR

請參見提 交您的更改、editor-cmd。

 

10、將無版本的文件或樹導入到項目存儲庫中

svn import

您可以使用 svn import 將無版本的文件或樹遞歸提交到項目存儲庫中。將根據需要在存儲庫中創建父目錄。使用下面的命令可以從 PATH 向 URL 遞歸提交副本。如果省略 PATH,將認爲其爲”r;.”。

svn import [PATH] URL

示例:若要在您的本地計算機上創建帶有一個文件的無版本目錄 (D)。請點擊項目左側導航窗格中的”r;Subversion”鏈 接,找到 Subversion 頁面。請注意,”r;瀏覽源代碼”下未列出 NEWDIR。若要將 D 導入項目存儲庫,請鍵入:

svn import -m "請在此處鍵入您的信息" D http://(項目名稱).(域)/svn/(項目名稱)/NEWDIR

刷新該頁面。請注意,此時”r;瀏覽源代碼”下列出了 D。點擊 D 查看該文件。

轉換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR, --auto-props, --no-auto-props

 

11、打印有關工作副本中文件的具體信息

svn info

有時,您將需要有關工作副本中文件的具體信息,以執行某些子命令。鍵入 svn info,將打印出詳盡且有用的信 息,這些信息涉及工作副本中的工作副本路徑中的項,其中包括:路徑、名稱、URL、修訂版本、節點類型、上次更改、作者、上次更改修訂版本、上次更改日 期、上次更新的文本、上次更新的屬性以及校驗和。

轉換:--targets FILENAME, --recursive (-R), --config-dir DIR

 

12、儲庫中的目錄項列表

svn list

在開始處理項目或取出”r;工作副本”之前,您可能希望查看項目存儲庫中的內容(即目錄和文件),或查看本地工作副本中的目錄項。在命令提示符處鍵 入 svn list [TARGET...],也可以查看這些內容。除此之外,您也可以找到項目中的”r;軟件 配置管理”頁,查看項目存儲庫。

轉換:--revision (-r) REV, --verbose (-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

 

13、查看提交日誌信息

svn log

如果要查看”r;工作副本”或存儲庫中文件/目錄的各個文件/目錄歷史,以跟蹤修訂信息,請鍵入:

svn log [PATH]

該命令會顯示出文件/目錄的修訂信息,從最近所做的修訂版本開始顯示提交信息和作者姓名等信息。除此之外,您也可以使用該站點,查看項目存儲庫 中各個文件的提交日誌信息。請點擊項目左側導航窗格中的”r;Subversion”鏈接。將出現 Subversion 頁。搜索”r;瀏覽源代碼”的目錄中的文件,然後點擊文件名。這時將會顯示一個提交日誌信息頁面。

轉 換:--revision (-r) REV, --quiet (-q), --verbose (-v), --targets FILENAME, --stop-on-copy, --incremental, --xml, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見 svn log。

 

14、合併更改

svn merge

您可以運行 svn merge 命令,以指示 Subversion 將存儲庫中最新版本的文件合併到您的工作副本中。

轉換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --force, --dry-run, --diff3-cmd CMD, --ignore-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見 svn merge、解 決衝突(合併其他人的更改)、分支和合並:常見合併使用案例、合 並最佳實踐。

使用存儲庫

 

15、創建新目錄

svn mkdir

若要在您的工作副本中創建新目錄,請鍵入:

svn mkdir PATH

若要在您的項目存儲庫中創建新目錄,請鍵入:

svn mkdir URL

PATH 或 URL 的最後一部分決定目錄名稱。在立即提交時在存儲庫中創建目錄,所以還需要一條提交信息

轉換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR

 

16、移動文件或目錄

svn move

您可以使用 svn move SRC DST 在工作副本或項目存儲庫內部移動文件或目錄。此命令等效於在使用 svn copy 後,再使用 svn delete。在工作副本內部移動文件或目錄,不僅會移動該文件或目錄,而且 還將安排它以便於下次提交時進行添加。在項目存儲庫內部移動文件或目錄屬於封閉單元式提交,所以需要一條提交信息。

轉換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR

使用屬性

Subversion 具有很多具體屬性,這些屬性影響或決定其行爲。您可以修改、提交和撤消屬性更改,就像對文件內容所執行的操作一樣。您還可以從本地工作副本或

項目存儲庫的 文件、目錄或修訂版本中,刪除、編輯、打印、列出以及設置屬性。

請參見 屬性、無 版本屬性、元數據屬性、svn propdel、svn propedit、svn propget、svn proplist、svn propset、Hook 腳本。

 

解決衝突:svn resolved

更新本地工作副本時,可能會遇到衝突。您需要解決此衝突。解決衝突後,鍵入 svn resolved PATH..., 通知工作副本該衝突已”r;解決”。

轉換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

請參見解 決衝突(合併其他人的更改)。

 

 

17、撤消您的更改

svn revert

使用 Subversion 時,您會發現 svn revert PATH... 等效於 Windows 中的 Ctrl Z。您可以:

撤消本地工作副本中的任何本地更改,從而解決衝突狀態。

撤消工作副本中的條目內容及屬性更改。

取消任何進度安排操作,如添加文件、刪除文件等。

注意,如不提供目標,會導致工作副本中的更改丟失。

轉換:--targets FILENAME, --recursive (-R), --quiet (-q), --config-dir DIR

 

18、獲取文件/目錄的狀態

svn status

在版本控制中,將更改提交到項目存儲庫之前最好對其進行審查。可以運行 svn status 打印工作副本中的文件和目錄的狀態。打印結果爲八列編碼輸出。由於每列都有詳盡的圖例,若要從此輸出中得出”r;無錯誤”的結論幾乎不可能。若要使此任務更加 簡單,並同時可看到示例,請在命令提示符處鍵入 svn help status。

轉換:--show-updates (-u), --verbose (-v), --non-recursive (-N), --quiet (-q), --no-ignore, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir

請參見檢 查你的更改。

 

轉換工作副本:svn switch

可以使用 svn switch URL [PATH] 更新工作副本,以鏡像新的 URL。您還可以將工作副本或部分工作副本移動到新的分支。您可以將此子命令用作分支的快捷方式。

轉換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --relocate, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見轉換工作副 本、分支和合並以 及 svn switch。

 

更新工作副本:svn update

爲了進行更好的版本控制,建議您每天用項目存儲庫更新本地工作副本,請使用:

svn update [PATH...]

列出的已更新條目以及它們的當前狀態顯示如下:

A = 已將一個文件添加到您的工作副本中。

U = 已更新您的工作副本中的一個文件。

D = 已從您的工作副本中刪除一個文件。

R = 已替換您的工作副本中的一個文件。

G = 已成功合併了一個文件。

C = 一個文件已合併了必須手動解決的衝突

轉換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --diff3-cmd CMD, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR

請參見更 新你的工作副本、手 動合併衝突。

分支和標記

項目的主幹通常用作開發主線,而分支通常用作主線的變更。分支是正在進行的開發線。在軟件開發生命週期中,如果軟件產品的發佈版本已到期,經常 會用到分支,使測試者可以使用候選版本,使新的開發可以繼續進行,不受測試的約束。分支還用於實驗性工作,以及完成代碼重寫。標記是將一組文件修訂版本標 記爲整體的方式。雖然分支和標記都是使用 svn copy 子命令創建的,但它們是完全不同的。分支表示多個修訂版本而標記只表示單個修訂版本。

本站點上您項目的 Subversion 存儲庫支持對您的源文件進行分支和標記。對於 Subversion 來說,標記和分支屬於簡單實用的”r;複製”操作。

若要創建分支或標記項目文件,請鍵入:

svn copy SRC DST -m "在此處鍵入您的信息"

 

 

 

常見問題

所有客戶端:

1, 爲什麼客戶端無法提交,報告需要"clean up"的錯誤。

Subversion客戶端在提交內容之前會在本地的工作拷貝寫日誌,防止其他客戶端再次作操作,如果這個提交過程中發生錯誤,就會存在未清理的日誌,解決這個問題只需要運行清理命令。

如果是使用svn命令行客戶端,只需要在待清理的目錄或其父目錄執行"svn cleanup",如果是TortoiseSVN,只需要在目錄或其父目錄執行"右鍵->TortoiseSVN->CleanUp"。

2,爲什麼添加的文件,別人看不到,版本庫裏也沒有?

最可能的原因是,你用svn add(如果是TortoiseSVN可能是”r;右鍵->TortoiseSVN->Add...”)添加某個文件,只是在本地註明某個文件是預定要增加,而沒有實際添加到版本庫,要添加到版本庫必須執行svn commit(如果是TortoiseSVN可能是”r;右鍵->svn commit...”)。

同樣的,svn delete要實際發生效果也需要svn commit。

3. Subversion有共享功能嗎?

這是很多人問得問題,就是一份代碼能否影射到多個地方,在一個地方提交,另一個地方更新的時候也能看到。

我想Subversion只是部分支持這個功能。一個方式是外部引用,具體看http://subversion.org.cn/svnbook/1.1/svn-ch-7-sect-3.html ,可以實現目錄的共享,不能用於文件。

另一種方式是硬鏈接,工作拷貝必須是類UNIX系統下才能用,類似於UNIX的鏈接功能。

4. Subversion有VSS一樣的鎖定功能嗎?

答案是有,通過給需要鎖定的文件增加svn:needs-lock鎖定即可,詳細內容見svnbook。

http://www.subversion.org.cn/svn ... .special.needs-lock

 

5.狀況是這樣的,已經修改到版本1284了,但是中間有個1113版本的提交導致更新失敗,需要將1113的修改恢復過來,就是去掉1113版本做的所有修改,

但是保留1114以及以後的所有修改,重新做一次build,然後發佈。我用什麼方法,在取代碼的時候,把這個V1113屏蔽掉呢??

 

知道合併嗎,取消某個版本的操作就是反向合併,在你的工作拷貝執行下面的命令。

svn merge -c -1113

 

6.如果是撤消1113,1114,1115版本的話,是不是分別執行svn merge -c -1113,svn merge -c -1114,svn merge -c -1115呢?

svn merge -c 1113,1114,1115就可以

運行svn help merge,就會很清楚

 

整體思路:

先有版本庫

當有穩定的版本後創建標記庫,就是將版本庫文件複製一份,這個標記庫是日後需要維護的基線庫。

之後的修改仍是在版本庫進行,測試時將所修改的版本與標記庫融合merge,如果測試失敗執行反向融合,這樣不會傷及基線庫

 

具體實現:

1、取項目

 svn checkout -r   修訂版字符串  --username songyc --password ehong svn://10.150.132.140/java-source songyc ehong

 

2、複製一份作爲標記庫

改用分支實現

 

E:/test_svn_oper>svn cp svn://10.150.132.140/java-source/data_mapping/  svn://10.150.132.140/java-source/data_mapping/branches/ 20100806_shawn_test_branch &endash;m "create a branch"

svn: 不能在源中混合版本庫和工作副本

 

懷疑是因爲版本庫中還沒有創建branches目錄,於是先創建

E:/test_svn_oper>svn mkdir svn://10.150.132.140/java-source/data_mapping/branches

svn: 無法使用外部編輯器獲得日誌信息;考慮設置環境變量 $SVN_EDITOR,或者使用 --message (-m) 或 --file (-F) 選項

svn: 沒有設置 SVN_EDITOR,VISUAL 或 EDITOR 環境變量,運行時的配置參數中也沒有 ”r;editor-cmd” 選項

 

E:/test_svn_oper>svn copy svn://10.150.132.140/java-source/data_mapping 20100806_shawn_test_branch -m "create a branch"

svn: 本地操作,非提交操作無須日誌信息或版本屬性

 

 

可以通過eclipse創建標記或分支,操作很簡便。

現在的問題是如何對branch進行版本融合?並取出

 

3、修改某兩個文件並更新,提交

 

4、將新版本與標記庫中的文件融合

 

5、反向融合其中一個文件

 

6、取出標記庫文件

 

7、執行ant腳本打包

 

 

 

 

E:/test_svn_oper/project_co/data_mapping>svn copy svn://10.150.132.140/java-source/Showcase/ svn://10.150.132.140/java-source/trunk  -m "create trunk"

提交後的版本爲 788。

 

E:/svnroot>dir

 驅動器 E 中的卷是 work

 卷的序列號是 A876-7349

 E:/svnroot 的目錄

2010-08-03  09:51    <DIR>          .

2010-08-03  09:51    <DIR>          ..

2010-03-16  10:58    <DIR>          dotnet-source

2010-03-16  10:58    <DIR>          EhongDocument

2010-03-16  10:58    <DIR>          java-source

2010-08-03  09:04    <DIR>          java-source-bak

2010-03-16  10:58    <DIR>          private

2010-08-03  09:51                47 svn_sync.bat

2010-05-10  10:16    <DIR>          vc-source

               1 個文件             47 字節

               8 個目錄 16,272,773,120 可用字節

E:/svnroot>cd java-source

E:/svnroot/java-source>svn update

跳過”r;.”

E:/svnroot/java-source>

 

svn add必須在本地副本中執行,否則就會報下面的錯誤

E:/svnroot/java-source>svn add -N branches svn://10.150.132.140/java-source/

svn: ”r;.”不是工作副本

svn: 不能打開文件”r;.svn/entries”: 系統找不到指定的路徑。

 

 

 

 

 

E:/test_svn_oper/project_co/branches>svn list svn://10.150.132.140/java-source

CompressFrameWork/

Showcase/

branches/

data_mapping/

ehongWS/

ehongWebservice/

esiExample/

esiapidemo/

esiapigwt/

generator/

gwtframework/

java_persistent/

physician_guidance/

tags/

trunk/

 

 

E:/test_svn_oper/project_co/branches>svn status

?      my-showcase-branch

 

 

E:/test_svn_oper/project_co/branches>svn update

版本 789。

 

E:/test_svn_oper/project_co/branches>svn --help import

 

E:/test_svn_oper/project_co/branches>svn import -m "test" my-showcase-branch svn://10.150.132.140/java-source/branches

增加           my-showcase-branch/war/showcase/deferredjs/B5CFCA6C372D6E83BDA4774483936248/28.cache.js

增加           my-showcase-branch/war/showcase/deferredjs/B5CFCA6C372D6E83BDA4774483936248/38.cache.js

增加           my-showcase-branch/war/showcase/deferredjs/B5CFCA6C372D6E83BDA4774483936248/2.cache.js

增加 (二進制)  my-showcase-branch/war/showcase/EDC7827FEEA59EE44AD790B1C6430C45.cache.png

增加 (二進制)  my-showcase-branch/war/favicon.ico

增加           my-showcase-branch/README.txt

增加           my-showcase-branch/build.xml

提交後的版本爲 790。

語法:

svn import -m "備註" 本地目錄 svn://遠程目錄/a/b/c

遠程庫下的目錄不用存在,會自動遞歸創建

 

 

 

--------------------------svn用戶和口令緩存到客戶端的位置---------------------------------------------------

C:/Documents and Settings/Administrator/Application Data/Subversion/auth

刪除auth下面的所有文件夾,重新連接遠程服務器,對話框終於出來了!

 

 

 

如果連接和checkout時提示服務器積極拒絕最大的可能是:

啓動服務時使用的端口在客戶端無法訪問。所以最好在啓動時不指定端口號。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章