此博文記錄了自己搭建svn的過程,為了簡單的記錄一下自己踩過的坑,及其想要記錄的知識點,所以許多素材均取於網絡,在博文后面我會附上所有的原文地址。
搭建SVN的目的就是代碼管理。主要分為三步:
- 1,安裝Linux上svn所需要的包
- 2,搭建項目設置權限並啟動
- 3,在windows上(客戶端)如何連接
前言:什么是SVN
SVN 是subversion的縮寫,是一個開放源代碼的版本控制系統,通過采用分支管理系統的高效管理,簡而言之就是用於多個人共同開發一個項目,實現共享資源,實現最終集中式的管理。
(前言內容均來自百度百科。SVN的簡介)
1,版本控制
一個軟件開發試行后,最關鍵的問題就是能夠有效地實現軟件版本系統的控制,而作為版本控制系統的核心任務,能否完成成功的查閱歷史操作記錄和實現協同開發才是公司研發團隊關注的問題。版本控制(Version control)是項目開發與管理的標准做法,能夠追蹤項目從開始到結束的整個過程,常被應用於軟件程式開發。對於編程人員而言,版本控制技術是團隊協作開發的橋梁,有助於多人同步進行大型程式開發。由於在多人協作開發的模式下,每個人都向服務器提交自己的文件,就可能存在着代碼被多次修改、替換的風險,但是版本控制能夠在每次更新操作后進行相應的記錄。一旦發生誤操作,開發者能夠根據服務器中的版本記錄,將項目恢復到出現問題之前的其他版本。因此,借助版本控制技術,軟件開發項目可以被分割為若干模塊,每個模塊並行地進行開發工作,從而有效地提高了整體編程效率。
版本控制技術對文件進行管理主要有兩種模式:Lock-Modify-Unlock(鎖-修改-解鎖)和Copy-Modify-Merge(拷貝-修改-合並)。
在Lock-Modify-Unlock工作模式下,若用戶想對某文件進行修改,必須先鎖定該文件再進行修改,修改操作完成之后再對其解鎖。這種文檔管理模式能夠有效避免多人對某文件同時進行修改而造成的沖突,但是它減少了用戶並發操作。除此之外,該模式還有一個非常明顯的缺點,即如果前面的用戶完成修改后,忘了對文件進行解鎖操作,則會導致后面想修改此文件的用戶將永遠處於等待解鎖狀態。采用這種管理模式的版本控制工具主要有Visual Source Safe(VSS)。
在Copy-Modify-Merge工作模式下,當某一用戶想修改文件時,可以先將服務器文件update到本地端,然后在本地端對副本進行修改,修改操作完成后,再將副本commit到服務器。如果在此用戶commit之前,原文件已經被其他用戶修改並提交過,那么服務器上的版本號與本地端上的版本號不同,二者將產生沖突,服務器將中止提交。此用戶只有將服務器上的新版本update到本地端,將其與自己修改的文件進行合並,才能重新commit到服務器。在實際編程中,文件的合並過程一般需要編程人員共同協商決定。這種“拷貝-修改-合並”雖然需要花費一定的時間,但卻比“鎖-修改-解鎖”等待的時間短,能夠增加操作的並發度,大大提高團隊的編程效率。
大多數版本控制系統采用的是第二種方式,如Concurrent Versions System(CVS)和Subversion(SVN),而這其中SVN是最為流行的版本控制軟件,許多開源軟件都采用了SVN作為源碼版本控制服務器。在SVN版本控制軟件的管理下,不管是在局域網還是在Internet上都可以對文件和目錄進行管理,它突破了時間與空間的限制,促進了團隊協作開發。
2,SVN 簡介
SVN的全稱是Subversion,即版本控制系統。它是最流行的一個開放源代碼的版本控制系統。作為一個開源的版本控制系統,Subversion管理着隨時間改變的數據。這些數據放置在一個中央資料檔案庫(Repository)中。這個檔案庫很像一個普通的文件服務器,不過它會記住每一次文件的變動。這樣就可以把檔案恢復到舊的版本,或是瀏覽文件的變動歷史。Subversion是一個通用的系統,可用來管理任何類型的文件,其中包括程序源碼。
SVN采用客戶端/服務器體系,項目的各種版本都存儲在服務器上,程序開發人員首先將從服務器上獲得一份項目的最新版本,並將其復制到本機,然后在此基礎上,每個開發人員可以在自己的客戶端進行獨立的開發工作,並且可以隨時將新代碼提交給服務器。當然也可以通過更新操作獲取服務器上的最新代碼,從而保持與其他開發者所使用版本的一致性。
SVN的的客戶端有兩類,一類是基於Web的Web SVN等,另一類是以Tortoise SVN為代表的客戶端軟件。前者需要Web服務器的支持,后者需要用戶在本地安裝客戶端,兩種都有免費的開源軟件供使用。SVN存儲版本數據也兩種方式:BDB(一種事務安全型表類型)和FSFS(一種不需要數據庫的存儲系統)。因為BDB方式在服務器中斷時,有可能鎖住數據,所以還是FSFS方式更安全一點。
3,SVN的工作機制
SVN系統具體是如何實現對項目軟件的版本控制,一方面通過實現歷史操作記錄查閱。在任意一台服務器中都可以添加一個SVN版本庫,而相應的版本庫中存放大量的程序和文檔,而這些項目資源主要通過配置管理員依據不同的配置管理計划對不同項目的組員分配與之相符合的訪問權限,進而實現對資源的統一管理;只有SVN標本過版本庫中的資源,項目組成員可以對版本資源庫中的資源進行訪問。
一次簡單的訪問過程包括:相關項目組員首先在客戶操作端建立一個從版本庫檢索出來的項目文件,而后就可以對拷貝的檔案進行修改,最后通過SVN提交命令將其修改后的項目文件提交到終端服務器,終端服務器最終會對修改后的項目文件做最后的綜合更新記錄。
修改過的文件在修改未被提交到服務器前,SVN服務器只會對已經提交到網絡端服務器的項目文檔進行更新審核,並與其他人的合並,在此之前修改過的文檔是保密的,提交之后SVN網絡端服務器會將修改后與修改之前的數據進行比較,並在后台對修改內容就行標注顯示,進而實現對歷史操作記錄的更新記載。最終實現項目組組員既能檢索出舊版本,又能通過SVN實現新舊版本的對比,另一方面SVN通過進行組員間的協同開發實現對項目軟件的版本控制。協同開發一般是指版本控制系統間接受並處理不同用戶提交的各種不同性質版本的資源代碼,同時允許各個用戶之間在遵循相應規則范圍內實現合作開發。如何處理好有矛盾的版本控制系統才是能夠協同開發的關鍵,像是多個程序編碼員同時對同一份資源代碼進行修改、提交到SVN版本庫,就有可能發生提交后的版本意見想法相沖等問題。
4,SVN的優勢
1,存儲
SVN 服務器既有CVS所具有數據儲存的優點,像是信息資源存儲后會形成資源樹結構,便於存儲的同時,數據一般不會丟失,同時又擁有自己的特色。SVN是通過關系數據庫及二進制的存儲方式,同時解決了既往不能同時讀寫同一文件等問題,同時增添了自己特有的“零或一”原則。
2,速度
與人們初始的CVS相比,SVN在速度運行方面有很大提升。因為SVN服務器只支持少量的信息,資源傳輸,與其他系統相比,更支持的是離線模式,因此避免了網絡擁擠線性的出現。
3,安全性
SVN是一種技術性更加安全的產品,實現了系統和控制兩方面的結合。一方面可以將系統整體的安全功能有效的分布在分支系統中,進而保證分支系統能正常運行,從而使各分支系統能夠互補,最終在系統整體性的安全性得以保障,通過均衡原則實現最終追求安全的目的。
5,SVN版次
Subversion使用“偶數/奇數”版次模式。偶數編號的小數點版次(1.0、1.2等)被認為是穩定的版次。這樣的版次只針對問題的修正才會變動,不會增加新功能,而且用戶會期待使用的軟件沒問題。相反地,奇數編號的小數點版次(1.1、1.3等)是開發(development)版本。在這樣的版本中會增加新功能,它們傾向於快速的變更與變革,且有可能會有使得數據遺失的缺陷或問題。如果穩定性與數據保存性對你而言是重要的,則你應該使用偶數編號的版次。只有在它具有一個重要及必須要有的功能而且你願意承擔風險時,才使用奇數編號的版次。
1,Linux安裝svn服務器
安裝之前可以查看Linux服務器是否已經安裝SVN服務,執行命令:svnserve --version
以上說明此服務器中未安裝SVN服務,如果沒有安裝,下面就來吧。
1.1 Linux離線安裝svn服務
首先下載相應的包,我下載了以下四個:
地址如下:
subversion 下載地址:http://subversion.apache.org sqlite 下載地址:http://www.sqlite.org apr 下載地址:http://archive.apache.org/dist/apr zlib 下載地址:http://linux.softpedia.com/get/Programming/Libraries/zlib-159.shtml
然后把下載好的包上傳到自己的Linux對應的目錄下,並解壓相關壓縮包,解壓命令:
tar -zxf 文件名.tar.gz
安裝之前,檢查是否已經安裝 gcc環境,如果沒有,先安裝 gcc 環境。下面安裝 包(步驟來自博客:https://www.cnblogs.com/code4app/p/7202039.html),如下:
1.安裝apr [root@localhost ~]$ cd apr-1.5.2 [root@localhost apr-1.5.2]$ ./configure --prefix=/home/svn/apr-1.5.2 [root@localhost apr-1.5.2]$ make [root@localhost apr-1.5.2]$ make test [root@localhost apr-1.5.2]$ make install 2.安裝apr-util: [root@localhost ~]$ cd apr-util-1.5.4 [root@localhost apr-util-1.5.4]$ ./configure --prefix=/home/svn/apr-util-1.5.4 --with-apr=/home/svn/apr-1.5.2 [root@localhost apr-util-1.5.4]$ make [root@localhost apr-util-1.5.4]$ make test [root@localhost apr-util-1.5.4]$ make install 3.安裝依賴的sqlite: 1.可以自行安裝sqlite或者將sqlite解壓到/home/svn/subversion-1.8.16/sqlite-amalgamation下 2.這里采取將sqlite解壓到/home/svn/download/subversion-1.8.18/sqlite-amalgamation下 3.將文件夾名稱改為要求的文件夾名稱 [root@localhost subversion-1.8.18]$ mv sqlite-autoconf-3190300 sqlite-amalgamation 4.安裝zlib: [root@localhost ~]$ cd zlib-1.2.11 [root@localhost zlib-1.2.11]$ ./configure --prefix=/home/svn/zlib-1.2.11 [root@localhost zlib-1.2.11]$ make [root@localhost zlib-1.2.11]$ make install 5.subversion的安裝: 1.[root@localhost ~]$ cd subversion-1.8.18 2.[root@localhost subversion-1.8.18]$ ./configure --prefix=/home/svn/subversion-1.8.16 --with-apr=/home/svn/apr-1.5.2 --with-apr-util=/home/svn/apr-util-1.5.4 --with-zlib=/home/svn/zlib-1.2.11 3.[root@localhost subversion-1.8.18]$ make 4.[root@localhost subversion-1.8.18]$ make install 6.安裝完成,添加環境變量path [root@localhost subversion-1.8.18]$ cd [root@localhost ~]$ vi .bash_profile 在文件里面添加以一行:PATH=/home/svn/subversion-1.8.18/bin:$PATH 並保持退出 [root@localhost ~]$ source .bash_profile 7.驗證安裝是否成功,輸入:svnserve --version
1.2 Linux 在線安裝svn服務
使用命令: yum install subversion
運行如下:
上面顯示說明svn服務安裝完成。
如果提示權限不足,就使用以下命令:su root
再執行 yum install subversion
安裝成功后,查看svn版本, svnserve --version
2,Linux下配置 svn
2.1 創建倉庫
創建倉庫:我們在/home
下建立一個名為svn
的倉庫(repository),以后所有代碼都放在這個下面,創建成功后在svn下面多了幾個文件夾。
我們這里特別關注 conf 文件夾,這個是存放配置文件的:
其中:
- authz 是權限控制文件
- passwd 是帳號密碼文件
- svnserve.conf 是SVN服務配置文件
如果用戶下是只讀(即權限為 r),請使用 chmod 777 + 文件
接下來我們依次修改這三個文件。
2.2 配置 passwd
下面我們編輯passwd文檔,然后創建兩個用戶,一個test1,一個 test2,如下:
部分 passwd 文檔內容如下:
2.3 配置 authz
下面編輯 authz文檔:
上面配置的含義是,liuxianan
對/home/svn/
下所有文件具有可讀可寫權限,test1, test2
只有只讀權限,除此之外,其它用戶均無任何權限,最后一行*=
很重要不能少。
拓展:使用用戶分組
比如下面文件:
上面配置創建了2個分組,分組1的用戶可讀可寫(一般權限大的為 root賬戶),分組2的用戶只能讀。
格式說明:
[/] #項目名字 @admin = rw (admin分組對整個testsvn版本庫可讀寫) test1 = rw (賬號test1對整個testsvn版本庫可讀寫) [/test] #項目組 @test = rw (test分組對整個testsvn/test目錄可讀寫)
2.4 配置 svnserve.conf
下面編輯 svnserve.conf文件:
注意:打開注釋千萬不要留有空格,否則可能有問題。
注意這里解開后,也可以這樣寫:
注意最后一個 realm,都強調說設置為自己的倉庫名稱,我也試了一下,設置自己的倉庫名稱,也設了初始的 My First Repository,均沒有出現問題。。。。。
2.5 啟動與停止
啟動svn命令和殺死進程的命令如下:
注意:上述啟動命令中,-d
表示守護進程, -r
表示在后台執行。
其實一個服務器只能啟動一個 svn,停止還可以采用殺死進程的方式:
2.6 svn從創建到啟動的所有命令集合
下面截圖是所有的過程:
3,客戶端連接使用
SVN 是一個跨平台的軟件,支持大多數常見的操作系統,下面主要學習SVN服務器在Windows上的安裝和配置過程。
這里使用TortoiseSVN,輸入地址svn://你的IP
即可,不出意外輸入用戶名和密碼就能連接成功了。
3.1 tortoiseGit的下載及其安裝
首先,去tortoise的官網下載軟件。下載地址:https://tortoisegit.org/download/
下載好后,傻瓜式安裝。當然你也可以下載語言補丁包(如果不習慣英文的話)。
安裝完畢后,鼠標右鍵就可以看到 SVNCheckout和TortoiseSVN。如下動圖:
3.2 客戶端連接svn
首先在Linux下接通 svn服務,然后使用 ifconfig 查看ip地址
鼠標右鍵,點擊輸入SVN Checkout,將剛剛獲取的 ip 地址寫入,並輸入對應的項目名稱:
點擊OK后,即正確輸入之后,會出現下面界面,並提示輸入用戶名,密碼:
(不要介意,將就着看,這是網圖,大概意思相近,只不過現在svn界面更新的更好了)
要想刪除之前保存的賬號密碼,我們要進入 tortoisesvn里面,點擊settings:
進去settings,然后去 Saved Data,如下,清除以前的cookie就可以。
4,Linux下SVN一個版本庫多個目錄權限設置
一個版本庫多個目錄的權限設置需要注意的是其中目錄在authz中的命名規范,否則你用戶的權限再怎么設置都是不起作用的。
[test:/] admin = rw * = r
admin用戶版本庫根目錄有讀寫權限(通過SVN客戶端的游覽版本庫可以測試),其他所有人只有只讀權限。
[test:/one](這里的目錄不能寫錯,寫錯后下面權限再怎么設置都會不起作用) user01 = r user01用戶對版本庫中的one目錄有只讀權限(通過SVN客戶端的游覽版本庫可以測試)
大家可以多建幾個用戶和目錄來測試一下。我也是在設置多目錄權限時碰到問題,最終總結出這個結果。
不過在一個project下面創建多個項目,可以這樣配置權限:
# 在總項目下的權限,除了admin,都是只讀權限 [/] admin = rw user1 = r user2 = r # 在總項目下設置projet1的權限 [/project1] admin = rw user1 = rw user2 = r # 在總項目下設置projet1的下的 demo1的權限 [/project1/demo1] admin = rw user1 = rw user11 = r user2 = r # 在總項目下設置projet2的權限 [/project2] admin = rw user1 = r user2 = rw
參考文獻:https://www.cnblogs.com/code4app/p/7202039.html
TortoiseSVN 使用教程:https://www.runoob.com/svn/tortoisesvn-intro.html
TotoiseSVN的基本使用方法:https://www.cnblogs.com/lsgxeva/p/9617795.html
http://blog.chinaunix.net/uid-7248244-id-2060481.html