SVN是近年來崛起的很是優秀的版本管理工具,與CVS管理工具同樣,SVN是一個固態的跨平臺的開源的版本控制系統。SVN版本管理工具管理者隨時間改變的各類數據。這些數據放置在一箇中央資料檔案庫(repository)中,這個檔案庫很像一個普通的文件服務器或者FTP服務器,可是,與其餘服務器不一樣的是,SVN會備份並記錄每一個文件每一次的修改更新變更。這樣咱們就能夠把任意一個時間點的檔案恢復到想要的某一箇舊的版本,固然也能夠直接瀏覽指定的更新歷史記錄。
爲何會有SVN這樣一個項目?
官方解釋:爲了接管CVS的用戶基礎,確切的說,咱們寫了一個新的版本控制系統,它和CVS很類似,可是它修正了之前CVS所沒有解決的許多問題。
SVN時一個很是通用的軟件系統,它常被用來管理程序 源碼,可是他也能夠管理任何相似的文件,如文本、視頻,圖片等等。css
SVN相關站點:git
截至到當前,所接觸到常見的版本管理軟件有:vss,cvs,svn,git,其中經常使用的就是SVN版本管理系統。程序員
SVN版本控制系統時集中式的數據管理,存在一箇中央版本庫,全部開發人員本地開發所使用的代碼都是來自於這個版本庫,提交了代碼也都必須提交到這個中央版本庫。
SVN版本控制系統工做流程以下:
1. 在中央庫上建立或從主幹複製一個分支。
2. 從中央庫check out下這個分支的代碼。
3. 增長本身的代碼文件,修改現存的代碼或刪除代碼文件。
4. Commit代碼。假設有人在剛剛的分支上提交了代碼,你就會被提示代碼過時。web
你得先up你的代碼後再提交。Up代碼的時候若是出現衝突,須要解決衝突後再進行提交。shell
Git是由Linus開發的,因此很天然的git個Linux文件系統結合的比較緊密,以致於在Windows上你必須使用cygwin才能使其完美工做。數據庫
那git憑什麼叫作分佈式的版本控制系統呢?仍是從模式講起。apache
Git中沒有了中央版本庫的說法了,可是爲了開發小組的代碼共享,從某種程度上說本地的倉庫和遠程的倉庫在身份上是等價的,沒有主從之分。vim
若是你的項目是閉源項目,或者你習慣於以往的集中式的管理模式的的話,那麼在git下你也能夠像SVN那麼工做,知識流程中可能增長一些步驟。安全
1. 你本地建立一個git庫,並將其add到遠程git庫中服務器
2. 你在本地添加或者刪除文件,然互commit。固然commit操做都是提交到本地的git庫中了(實際上是提交到git目錄下的object目錄中去了)
3. 將本地git庫的分支push到遠程git庫的分支,若是這個時候遠程git庫中已經有別人push過,那麼遠程git庫將不容許你push,這個時候你須要先pull,而後若是有衝突,處理好衝突,commit到本地git庫後,再push到遠程git庫。
SVN還是當前企業主流。Git正在發展,也許將來也會成爲主流,可是如今還不是。
對於版本管理系統,運維人員須要掌握的技術點:
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)
SVN客戶端能夠經過多種方式訪問服務器,例如:本地磁盤訪問,或者各類各樣不一樣的網絡協議訪問,但一個版本庫地址永遠都是URL,URL反映了訪問方法。
SVN是一種集中式版本管理系統,集中式管理的工做流程以下圖所示:
集中式代碼管理的核心是SVN服務器,全部開發者在開始新一天的工做以前必須從服務器獲取代碼,而後進行開發,最後解決衝突,提交。全部的版本信息都放在SVN服務器上。所以若是脫離了服務器,開發者就沒法進行提交代碼工做
下面舉例說明:
開始新一天的工做:
這就是經典的SVN工做流程,從流程上看有缺點也有優勢:
缺點:
優勢:
1. 管理方便,邏輯清晰明確,符合通常人思惟習慣。
2. 易於管理,中實施svn服務器更能保證數據安全性。
3. 代碼一致性很是高。
4. 適合開發人數很少的項目開發。
5. 普及度高,大部分軟件配置管理的大學教材都是使用svn和vss。
[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
1. 首先檢查SVN軟件程序是否已經安裝:
[root@svn ~]# rpm -qa subversion subversion-1.6.11-14.el6.x86_64
2.若是沒有如上結果,則須要執行以下命令安裝
[root@svn ~]# yum install subversion -y [root@svn ~]# rpm -qa subversion subversion-1.6.11-15.el6_7.x86_64
補充:yum安裝rpm包安裝後本地不清除的方法
[root@svn ~]# grep keepcache /etc/yum.conf keepcache=1
創建SVN版本庫數據存儲根目錄(svndata)及用戶,密碼權限目錄(svnpasswd)
#數據存儲根目錄 [root@svn ~]# mkdir -p /root/svndata #用戶密碼權限目錄 [root@svn ~]# mkdir -p /root/svnpasswd
啓動SVN服務指定訪問的SVN根目錄
[root@svn ~]# svnserve -d -r /root/svndata/
能夠查看svnserve命令幫助,瞭解相關啓動參數:
[root@svn ~]# svnserve --help
查看SVN進程
[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端口
[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
建立一個新的SVN項目sadoc其實相似sadoc這樣的項目能夠建立多個,每一個項目對應不一樣的代碼,這裏只是以建立一個項目爲例。
[root@svn ~]# svnadmin create /root/svndata/sadoc [root@svn ~]# LANG=en [root@svn ~]# tree /root/svndata/sadoc/
修改svnserve.conf文件
[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
更改後的結果:
[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文件添加用戶及密碼
把密碼文件模板拷貝到相關目錄 [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文件設置權限
[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目錄設置權限;
Win32位操做系統
http://sourceforge.net/projects/tortoisesvn/files/1.6.16/root/TortoiseSVN-1.6.16.21511-win32-svn-1.6.17.msi/download
Win64位操做系統
http://sourceforge.net/projects/tortoisesvn/files/latest/download
軟件down下來後,雙擊安裝便可,這個比較簡單,相信你們都沒問題。
將須要上傳的文件進行checkout檢出
URL:是服務端地址
Chekout directory 是本地須要上傳的
輸入正確的用戶名和密碼,點擊保存
檢出成功
文件夾會出現綠色打鉤的標示,表明版本和svn一致
服務器更新了文件,使用SVNupdate同步最新版本
新文件,會從服務器更新至本地
放一個文件進去,而後右鍵文件-àSVNCommit進行提交
選擇ALL勾選全部進行提交,也可自行勾選提交
提交成功,version會+1
[root@svn ~]# svn --help
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方式導入
[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
查看服務器端的數據
[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服務端數據
svn co svn://10.0.0.52/sadoc/ /root/sadoc/ --username zhangyang --password zhangyang123
能夠本地更新
[root@svn svndata]# svn co file:///root/svndata/sadoc/
查看版本庫的內容‘
[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
[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本地更新查看是否存在
[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
主幹拷貝成分支的命令
[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/
提交:
[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
出現錯誤
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"
鉤子腳本的具體寫法就是操做系統中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
[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
#!/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=zhangyang123 /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
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訪問。