學習SVN01

SVN服務器搭建實錄

 

第一章  SVN介紹

1.1 什麼是SVN(subversion)

  SVN是近年來崛起的很是優秀的版本管理工具,與CVS管理工具同樣,SVN是一個固態的跨平臺的開源的版本控制系統。SVN版本管理工具管理者隨時間改變的各類數據。這些數據放置在一箇中央資料檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,可是,與其餘服務器不一樣的是,SVN會備份並記錄每一個文件每一次的修改更新變更。這樣咱們就能夠把任意一個時間點的檔案恢復到想要的某一箇舊的版本,固然也能夠直接瀏覽指定的更新歷史記錄。
    爲何會有SVN這樣一個項目?
    官方解釋:爲了接管CVS的用戶基礎,確切的說,咱們寫了一個新的版本控制系統,它和CVS很類似,可是它修正了之前CVS所沒有解決的許多問題。
    SVN時一個很是通用的軟件系統,它常被用來管理程序 源碼,可是他也能夠管理任何相似的文件,如文本、視頻,圖片等等。css

SVN相關站點:html

截至到當前,所接觸到常見的版本管理軟件有:vss,cvs,svn,git,其中經常使用的就是SVN版本管理系統。git

2 SVN與git的區別

2.1 SVN集中式版本控制系統

SVN版本控制系統時集中式的數據管理,存在一箇中央版本庫,全部開發人員本地開發所使用的代碼都是來自於這個版本庫,提交了代碼也都必須提交到這個中央版本庫。
    SVN版本控制系統工做流程以下:
1. 在中央庫上建立或從主幹複製一個分支。
2. 從中央庫check out下這個分支的代碼。
3. 增長本身的代碼文件,修改現存的代碼或刪除代碼文件。
4. Commit代碼。假設有人在剛剛的分支上提交了代碼,你就會被提示代碼過時。程序員

你得先up你的代碼後再提交。Up代碼的時候若是出現衝突,須要解決衝突後再進行提交。web

2.2 git分佈式版本控制

    Git是由Linus開發的,因此很天然的git個Linux文件系統結合的比較緊密,以致於在Windows上你必須使用cygwin才能使其完美工做。shell

那git憑什麼叫作分佈式的版本控制系統呢?仍是從模式講起。數據庫

Git中沒有了中央版本庫的說法了,可是爲了開發小組的代碼共享,從某種程度上說本地的倉庫和遠程的倉庫在身份上是等價的,沒有主從之分。apache

若是你的項目是閉源項目,或者你習慣於以往的集中式的管理模式的的話,那麼在git下你也能夠像SVN那麼工做,知識流程中可能增長一些步驟。vim

1. 你本地建立一個git庫,並將其add到遠程git庫中安全

2. 你在本地添加或者刪除文件,然互commit。固然commit操做都是提交到本地的git庫中了(實際上是提交到git目錄下的object目錄中去了)

3. 將本地git庫的分支push到遠程git庫的分支,若是這個時候遠程git庫中已經有別人push過,那麼遠程git庫將不容許你push,這個時候你須要先pull,而後若是有衝突,處理好衝突,commit到本地git庫後,再push到遠程git庫。

3 企業應用場景

SVN還是當前企業主流。Git正在發展,也許將來也會成爲主流,可是如今還不是。

4 運維人員掌握版本管理

    對於版本管理系統,運維人員須要掌握的技術點:

  1. 安裝,部署,維護,故障。
  2. 簡單的使用,不少公司都是由開發來管理,包括創建帳戶和添加刪除帳號。
  3. 對於版本控制系統,運維人員至關於開發商,開發人員是業主,運維搭建的系統爲開發人員服務。

5 SVN服務運行模式和訪問方式

5.1 Svn服務端運行方式

svn服務常見的運行訪問方式有3種:

一、獨立服務器

訪問地址如:svn://svn.baby.org/sadoc);

二、藉助apache等http服務

訪問地址如:http://svn.baby.org/sadoc);

       a.單獨安裝apache+svn(不要用)。

       b.CSVN(apache+svn)是一個單獨的整合的軟件,帶web界面管理的SVN軟件

三、本地直接訪問(例如:file:///root/svndata/sadoc)

5.2 SVN客戶端訪問方式

SVN客戶端能夠經過多種方式訪問服務器,例如:本地磁盤訪問,或者各類各樣不一樣的網絡協議訪問,但一個版本庫地址永遠都是URL,URL反映了訪問方法。

6 svn 版本系統邏輯架構原理圖

7 SVN集中版本管理系統

SVN是一種集中式版本管理系統,集中式管理的工做流程以下圖所示:

 

 

 

集中式代碼管理的核心是SVN服務器,全部開發者在開始新一天的工做以前必須從服務器獲取代碼,而後進行開發,最後解決衝突,提交。全部的版本信息都放在SVN服務器上。所以若是脫離了服務器,開發者就沒法進行提交代碼工做

8 開發者利用SVN版本管理工做過程

下面舉例說明:

開始新一天的工做:

  1. 首先從SVN服務器下載項目組最新代碼:
  2. 進入本身的分支,進行開發工做,每隔一小時向服務器上本身的分支提交一次代碼(不少程序員都有這個習慣。由於有時候本身對代碼改來改去,最後又想還原到前一個小時的版本,或者看看前一小時修改了哪些代碼,就須要這樣作了)
  3. 下班時間快到了,把本身的分支合併到主分支上,一天的工做完成,並反映給服務器

這就是經典的SVN工做流程,從流程上看有缺點也有優勢:

缺點:

  1. 因爲每一次提交都保留一個原始副本,所以SVN數據庫容量會暴增
  2. 若是不能鏈接到SVN服務器上,基本上不能夠工做, 例如上面第二步,若是服務器不能鏈接上,就不能提交,還原,對比 。
  3. 不適合開源系統開發(開發人數很是多,可是Google appengine就是用的SVN的)可是通常集中式管理的有很是明確的權限管理機制(例如分只訪問限制)能夠實現分層管理,從而很好的解決開發人數衆多的問題。

優勢:
1. 管理方便,邏輯清晰明確,符合通常人思惟習慣。
2. 易於管理,中實施svn服務器更能保證數據安全性。
3. 代碼一致性很是高。
4. 適合開發人數很少的項目開發。
5. 普及度高,大部分軟件配置管理的大學教材都是使用svn和vss。

第二章 安裝配置SVN服務

1 準備操做系統並查看系統環境

?
1
2
3
4
5
6
[root@svn ~]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@svn ~]# uname -r
2.6.32-573.el6.x86_64
[root@svn ~]# uname -m
x86_64

2 安裝SVN(subversion )

1. 首先檢查SVN軟件程序是否已經安裝:

?
1
2
[root@svn ~]# rpm -qa subversion
subversion-1.6.11-14.el6.x86_64

2.若是沒有如上結果,則須要執行以下命令安裝

?
1
2
3
[root@svn ~]# yum install subversion -y
[root@svn ~]# rpm -qa subversion
subversion-1.6.11-15.el6_7.x86_64

補充:yum安裝rpm包安裝後本地不清除的方法

?
1
2
[root@svn ~]# grep keepcache /etc/yum.conf   
keepcache=1     

3 配置並啓動SVN

創建SVN版本庫數據存儲根目錄(svndata)及用戶,密碼權限目錄(svnpasswd)

?
1
2
3
4
#數據存儲根目錄
[root@svn ~]# mkdir -p /root/svndata
#用戶密碼權限目錄
[root@svn ~]# mkdir -p /root/svnpasswd 

啓動SVN服務指定訪問的SVN根目錄

?
1
[root@svn ~]# svnserve -d -r /root/svndata/  

能夠查看svnserve命令幫助,瞭解相關啓動參數:

?
1
[root@svn ~]# svnserve --help

查看SVN進程

?
1
2
3
[root@svn ~]# ps -ef |grep svn
root       3008      1  0 00:32 ?        00:00:00 svnserve -d -r /root/svndata/
root       3010   2919  0 00:32 pts/0    00:00:00 grep svn

檢查SVN端口

?
1
2
3
4
5
[root@svn ~]# lsof -i :3690
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
svnserve 3008 root    3u  IPv4  53617      0t0  TCP *:svn (LISTEN)
[root@svn ~]# netstat -lntup|grep svn
[root@svn ~]# lsof -i tcp:3690

4 創建項目版本庫

建立一個新的SVN項目sadoc其實相似sadoc這樣的項目能夠建立多個,每一個項目對應不一樣的代碼,這裏只是以建立一個項目爲例。

?
1
2
3
[root@svn ~]# svnadmin create /root/svndata/sadoc
[root@svn ~]# LANG=en
[root@svn ~]# tree /root/svndata/sadoc/

5 調整SVN配置文件及權限

修改svnserve.conf文件

?
1
2
3
4
5
6
7
8
[root@svn ~]# cd /root/svndata/sadoc/conf/
[root@svn conf]# ll
total 12
-rw-r--r-- 1 root root 1080 Feb 23 16:11 authz
-rw-r--r-- 1 root root  309 Feb 23 16:11 passwd
-rw-r--r-- 1 root root 2279 Feb 23 16:11 svnserve.conf
[root@svn conf]# cp svnserve.conf{,.org} 操做前備份
[root@svn conf]# vim svnserve.conf

更改後的結果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@svn conf]# diff svnserve.conf.org svnserve.conf
12,13c12,13
< # anon-access = read
< # auth-access = write
---
> anon-access = none
> auth-access = write
20c20
< # password-db = passwd
---
> password-db = /root/svnpasswd/passwd
27c27
< # authz-db = authz
---
> authz-db = /root/svnpasswd/authz
提示:能夠用sed進行快速替換,每一個開頭要頂格寫,沒有空格
     等號前爲帳戶等號後爲密碼,密碼是明文的,注意權限
     更改svnserve.conf,須要重啓SVN,更改authz,passwd不比重啓。
#重啓SVN命令
[root@svn svnpasswd]# svnserve -d -r /root/svndata/

 修改passwd文件添加用戶及密碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
把密碼文件模板拷貝到相關目錄
[root@svn conf]# cp passwd authz /root/svnpasswd/
[root@svn conf]# ll /root/svnpasswd/
total 8
-rw-r--r-- 1 root root 1080 Mar 31 00:51 authz
-rw-r--r-- 1 root root  309 Mar 31 00:51 passwd
爲了安全起見能夠加權限
[root@svn conf]# cd /root/svnpasswd/
[root@svn svnpasswd]# chmod 700 *
[root@svn svnpasswd]# ll
total 8
-rwx------ 1 root root 1080 Mar 31 00:51 authz
-rwx------ 1 root root  309 Mar 31 00:51 passwd
[root@svn svnpasswd]# cd /root/svnpasswd/
[root@svn svnpasswd]# vim passwd
[root@svn svnpasswd]# cat passwd
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
zhangyang = zhangyang123
gongli = gongli123
stu001 = 123
stu002 = 456
youngcheung = youngcheung123
[root@svn svnpasswd]#

修改authz文件設置權限

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@svn svnpasswd]# cat authz
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
#
zhangyang26 = stu001,stu002
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[sadoc:/]
zhangyang = rw
gongli = r
@zhangyang26 = r
youngcheung = rw
 
注意:
一、權限配置文件中出現的額用戶名必須已在用戶配置文件中定義。
二、對權限配置文件的修改當即生效,沒必要重啓svn。
用戶組格式:
[groups]
=,
其中,1一個胡勇組能夠包含1和或多個用戶,用戶間以逗號分隔。
版本庫目錄格式:
[版本庫:/項目/目錄]
@用戶組名=權限
用戶名=權限
其中,方括號內部分能夠有多種寫法:
[/],表示根目錄及如下,跟目錄是svnserve啓動時指定的
[repos:/]表示對版本庫repos設置權限;
[repos:/sadoc]表示對版本庫repos中的sadoc項目設置權限;
[repos:/sadoc/web]表示對版本庫repos中的sadoc項目的web目錄設置權限;

第三章 客戶端軟件TortoiseSVN SVN安裝

Win32位操做系統

?
1
http: //sourceforge.net/projects/tortoisesvn/files/1.6.16/root/TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi/download

Win64位操做系統

?
1
http: //sourceforge.net/projects/tortoisesvn/files/latest/download

軟件down下來後,雙擊安裝便可,這個比較簡單,相信你們都沒問題。

SVN配置

將須要上傳的文件進行checkout檢出

 

URL:是服務端地址

Chekout directory 是本地須要上傳的

 

輸入正確的用戶名和密碼,點擊保存

檢出成功

 

文件夾會出現綠色打鉤的標示,表明版本和svn一致

 

SVN更新

服務器更新了文件,使用SVNupdate同步最新版本

 

新文件,會從服務器更新至本地

 

SVN上傳

放一個文件進去,而後右鍵文件-àSVNCommit進行提交

 

選擇ALL勾選全部進行提交,也可自行勾選提交

 

提交成功,version會+1

 

第四章 Linux下SVN管理

1 SVN管理命令用法

[root@svn ~]# svn --help

2 導入SVN原始目錄樹

?
1
2
3
4
5
6
7
8
9
10
11
12
svn import(recursively commit a copy of PATH to URL)導入目錄結構到SVN服務端
[root@svn db]# svn import /tmp/dir/ svn: //10.0.0.52/sadoc/ -m "import svntree"
[root@svn ~]# svnadmin create /root/svndata/zhangyang
[root@svn ~]# mkdir -p /svn/trunk /svn/branch /svn/tag
[root@svn ~]# svn import /svn/ file: ///root/svndata/zhangyang -m "import"
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is en
svn: warning: please check that your locale name is correct
Adding         /svn/trunk
Adding         /svn/tag
Adding         /svn/branch
提示:svn import /data/zhangyang/ svn: //10.0.0.9/sadoc/ -m 「import svntree」 svn方式導入

3 從SVN庫提取數據

?
1
2
3
4
5
6
7
8
9
10
11
12
[root@svn ~]# svnadmin create /root/svndata/zhangyang
svnadmin: warning: cannot set LC_CTYPE locale
svnadmin: warning: environment variable LANG is en
svnadmin: warning: please check that your locale name is correct
[root@svn ~]# mkdir -p /svn/trunk /svn/branch /svn/tag
[root@svn ~]# svn import /svn/ file: ///root/svndata/zhangyang -m "import"
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is en
svn: warning: please check that your locale name is correct
Adding         /svn/trunk
Adding         /svn/tag
Adding         /svn/branch

查看服務器端的數據

?
1
2
[root@svn sadoc]# svn ls svn: //192.168.1.9/sadoc/   --username=zhangyang  --password=zhangyang123
[root@svnsadoc]#svn ls  svn: //10.0.0.52/sadoc/   --username=zhangyang  --password=zhangyang123 –verbose

當Windows發生改變可使用下面命令更新Linux服務端數據

?
1
svn co svn: //10.0.0.52/sadoc/ /root/sadoc/ --username zhangyang --password zhangyang123

能夠本地更新

?
1
[root@svn svndata]# svn co file: ///root/svndata/sadoc/

4 查看SVN中的數據

查看版本庫的內容‘

?
1
2
3
4
5
6
7
8
9
[root@svn ~]# svn list file: ///root/svndata/zhangyang/
branch/
tag/
trunk/
[root@svn ~]# svn list file: ///root/svndata/sadoc/ --verbose
       6 zhangyang                Mar 31 02:10 ./
       4 zhangyang                Mar 31 02:08 data/
       1 zhangyang                Mar 31 01:42 old/
       5 zhangyang              0 Mar 31 02:10 zhangyang.txt

5 從本地提交數據到SVN

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
[root@svn sadoc]# cd /svndata/
[root@svn svndata]# ll
total 12
drwxr-xr-x 3 root root 4096 Mar 31 02:09 data
drwxr-xr-x 3 root root 4096 Mar 31 02:08 old
-rw-r--r-- 1 root root    0 Mar 31 02:10 zhangyang.txt
drwxr-xr-x 5 root root 4096 Mar 31 02:13 sadoc
[root@svn svndata]# rm -rf sadoc/
[root@svn svndata]# ll
total 8
drwxr-xr-x 3 root root 4096 Mar 31 02:09 data
drwxr-xr-x 3 root root 4096 Mar 31 02:08 old
-rw-r--r-- 1 root root    0 Mar 31 02:10 zhangyang.txt
[root@svn svndata]# touch {a..g}
[root@svn svndata]# ll
total 8
-rw-r--r-- 1 root root    0 Mar 31 02:28 a
-rw-r--r-- 1 root root    0 Mar 31 02:28 b
-rw-r--r-- 1 root root    0 Mar 31 02:28 c
-rw-r--r-- 1 root root    0 Mar 31 02:28 d
drwxr-xr-x 3 root root 4096 Mar 31 02:09 data
-rw-r--r-- 1 root root    0 Mar 31 02:28 e
-rw-r--r-- 1 root root    0 Mar 31 02:28 f
-rw-r--r-- 1 root root    0 Mar 31 02:28 g
drwxr-xr-x 3 root root 4096 Mar 31 02:08 old
-rw-r--r-- 1 root root    0 Mar 31 02:10 zhangyang.txt
[root@svn svndata]# pwd
/svndata
[root@svn svndata]# svn add a b c d e f g
A         a
A         b
A         c
A         d
A         e
A         f
A         g
[root@svn svndata]# ls
a  b  c  d  data  e  f  g  old  zhangyang.txt
[root@svn svndata]# svn ci
svn: Commit failed (details follow):
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options
svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set , and no 'editor-cmd' run-time configuration option was found
[root@svn svndata]# svn ci -m "svn ci data"
Adding         a
Adding         b
Adding         c
Adding         d
Adding         e
Adding         f
Adding         g
Transmitting file data .......
Committed revision 7.
Windows本地更新查看是否存在

6 SVN copy

?
1
2
3
4
5
[root@svn svndata]# mkdir -p /svn/trunk /svn/branch /svn/tag
[root@svn ~]# svn import /svn/ file: ///root/svndata/zhangyang -m "import"
Adding         /svn/trunk
Adding         /svn/tag
Adding         /svn/branch

主幹拷貝成分支的命令

?
1
2
[root@svn svndata]# svn copy svn: //10.0.0.9/sadoc/trunk svn://10.0.0.9/sadoc/branch_cms_110 -m "create a branch by zy" --username=zhangyang --password=zhangyang123
svn list file: ///root/svndata/sadoc/svn list file:///root/svndata/sadoc/

提交:

?
1
2
3
4
5
[root@web01 sadoc]# svn ci -m "zhangyang data" --username zhangyang --password zhangyang123
checkout:
svn co svn: //10.0.0.5/sadoc/ /root/sadoc/ --username=zhangyang --password=zhangyang123
commit:
svn ci -m "zhangyang data" --username zhangyang --password zhangyang123

出現錯誤

?
1
2
3
svn: Can 't convert string from ' UTF-8' to native encoding:
svn: /svndata/?\230?\150?\176?\229?\187?\186?\230?\150?\135?\230?\156?\172?\230?\150?\135?\230?\161?\163.txt
解決export LC_CTYPE= "zh_CN.UTF-8"

svn鉤子腳本簡介

    鉤子腳本的具體寫法就是操做系統中shell腳本程序的寫法,可根據本身的svn所在的操做系統和shell程序進行相應的開發。
    鉤子腳本就是被某些版本庫時間出發的程序,例如:建立新版本或修改成被版本控制的屬性。每一個鉤子都能掌管足夠的信息來了解發生了什麼事件,操做對象時什麼以及出發時間用戶的帳號。相似inotify或sersync。
    根據鉤子的輸出或者返回狀態,鉤子程序能以某種方式控制該動做繼續執行,中止或掛起。

默認狀況下,鉤子的子目錄中包含各類版本庫鉤子模板

[root@svn ~]# ls -l /root/svndata/sadoc/hooks/

total 36

-rw-r--r-- 1 root root 1977 Mar 31 00:35 post-commit.tmpl

-rw-r--r-- 1 root root 1638 Mar 31 00:35 post-lock.tmpl

-rw-r--r-- 1 root root 2289 Mar 31 00:35 post-revprop-change.tmpl

-rw-r--r-- 1 root root 1567 Mar 31 00:35 post-unlock.tmpl

-rw-r--r-- 1 root root 3426 Mar 31 00:35 pre-commit.tmpl

-rw-r--r-- 1 root root 2410 Mar 31 00:35 pre-lock.tmpl

-rw-r--r-- 1 root root 2786 Mar 31 00:35 pre-revprop-change.tmpl

-rw-r--r-- 1 root root 2100 Mar 31 00:35 pre-unlock.tmpl

-rw-r--r-- 1 root root 2780 Mar 31 00:35 start-commit.tmpl

1.2   SVN鉤子生產應用場景舉例

1.3   SVN生產應用實戰

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@svn ~]# mkdir /data/www/ -p
[root@svn data]# svn co svn: //10.0.0.9/sadoc /data/www --username=zhangyang --password=zhangyang123
A    /data/www/a
A    /data/www/branch_cms_110
A    /data/www/b
A    /data/www/c
A    /data/www/d
A    /data/www/trunk
A    /data/www/e
A    /data/www/f
A    /data/www/g
A    /data/www/zhangyang.txt
A    /data/www/data
A    /data/www/tag
A    /data/www/branch
A    /data/www/old
Checked out revision 9.
[root@svn hooks]# dos2unix post-commit
dos2unix: converting file post-commit to UNIX format ...

[root@svn hooks]# cat post-commit

?
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
REPOS= "$1"
REV= "$2"
export LANG= "en_US.UTF-8"
LOGPATH= "/app/log"
[ ! -d ${LOGPATH} ] $$ mkdir ${LOGPATH} -p
SVN=/usr/bin/svn
$SVN update --username zhangyang --password=zhangyang 123 /data/www
if [ $? -eq 0 ]
  then
   /usr/bin/rsync -az --delete /data/www /tmp
fi

[root@svn hooks]# dos2unix post-commit

dos2unix: converting file post-commit to UNIX format ...

添加執行權限

chmod 755 post-commit

利用pre-commit限制上傳文件擴展名及大小

JIRA 用於缺陷跟蹤、客戶服務、需求收集、流程審批、任務跟蹤、項目跟蹤和敏捷管理等工做領域。

B.Mantis是一款PHP開源Bug跟蹤系統,比較適合中小型項目的管理及跟蹤,具備多特性包括:易於安裝,易於操做,基於Web,支持任何可運行PHP的平臺(Windows,Linux,Mac,Solaris,AS400/i5等),已經被翻譯成68種語言,支持多個項目,爲每個項目設置不一樣的用戶訪問級別,跟蹤缺陷變動歷史,定製個人視圖頁面,提供全文搜索功能,內置報表生成功能(包括圖形報表),經過Email報告缺陷,用戶能夠監視特殊的Bug,附件能夠保存在web服務器上或數據庫中(還能夠備份到FTP服務器上),自定義缺陷處理工做流,支持輸出格包括csv、MicrosoftExcel、MicrosoftWord,集成源代碼控制(SVN與CVS),集成wiki知識庫與聊天工具(可選/可不選),支持多種數據庫(MySQL、MSSQL、PostgreSQ、Oracle、DB2),提供WebService(SOAP)接口,提供Wap訪問。

相關文章
相關標籤/搜索