SVN自動化
正文共:5007?字
預計閱讀時間:?13?分鐘
平時自己多用Git來做版本控制,但很多公司內部依舊使用SVN,核心原因其實就是SVN夠用了,懶得換,雖然自己用git,但對git理解也算特別深刻,而轉到SVN發現是類似的,所以借此機會內化一下SVN的處理。
文章內容的結構會先理清楚SVN的聲明周期,接著會在Centos下搭建SVN服務,接著創建一個項目并使用客戶端手動進行SVN操作,最后使用shell命令進行自動化上傳。
SVN生命周期
創建版本庫首先創建版本庫,版本庫其實就是一個空間,用于開發者存儲所有的工作成果,版本庫不僅可以放文件,還會保留每次修改的歷史記錄,每個文件的變動歷史。
檢出 CheckoutCheckout會從版本庫中創建一個工作副本,工作副本是開發者的私人工作空間,可以進行內容修改,然后提交到版本庫中。
更新 updateupdate用來更新版本庫,該操作會將工作副本與版本庫進行同步。因為版本庫由整個團隊共用,當他人提交了自己的修改后,自己的工作副本就過期了。此時就需要還是用update更新操作從版本庫中拉取最新的代碼更新到自己的工作副本中。
執行變更當你檢出Checkout獲得自己的工作副本后,通常會進行編輯等操作,此時就發生了變更,變更的內容只有通過commit操作才會成為版本庫的一部分。刪除操作也一樣,如果沒有進行commit操作,版本庫中的文件是不會刪除的。
復查變化當你對工作副本進行修改后,此時你的工作副本就與版本庫不相同,此時在commit前復查一下自己的修改比較好status操作會列出當前工作副本中所進行的改動,status操作只提供一個變動列表,但并不會顯示詳細信息。
修復錯誤當你對工作副本做了很多修改后,突然不想要這些修改了,可以執行revert操作,revert操作會重置對工作副本的修改,他可重置一個或多個文件或文件夾,也可以對整個工作副本進行重置。revert操作UI將銷毀待變革列表并將工作副本恢復到原始狀態。
解決沖突合并時,可能發生沖突。merge操作會自動處理可以安全合并的內容,其他會被當做沖突,如hello.py文件在一個分支上被修改了,在另一個分支上被刪除了,這種情況需要人為進行處理,resolve操作可以幫助你找到沖突,并告訴版本庫應該如果處理這些沖突。
提交更改commit操作用來將更改從工作副本到版本庫,這個操作會修改版本庫中的內容,其他開發者可以通過更新他們的工作副本來查看這些修改。在提交前,這些修改必須添加到待變更列表中,列表中記錄了將會被提交的改動,在提交時通常會提供可以提供一個注釋來說明為何會進行這些修改。commit是原子操作,,要買完全提交成功,要么失敗回滾,不會出現提交到一半的情況。
Centos搭建SVN服務
SVN分成兩塊,一塊是server進程,通常在服務器上用于與SVN客戶端交互,另一塊就是SVN客戶端client進程,即開發者使用的,開發者使用SVN通常就是使用client端輸入相應的SVN命令與Server端交互,以實現相應的效果,這里我們先來搭建SVN服務,即Server端,流程比較簡單。
下載安裝SVN服務端,在Centos中,使用yum一步完成
yum install -y subversion
創建一個目錄,使用svnadmin將其設為SVN的版本庫
mkdir -p /home/svn/project
svnadmin create /home/svn/project/
svnadmin將該目錄設置為版本庫后,就會在該目錄中生成相應的文件,這里會在 /home/svn/project
生成相應的目錄,其中conf目錄下有三個比較重要的文件,分別為: authz
權限配置文件 passwd
用戶名口令文件 svnserver.conf
svn服務綜合配置文件
配置authz, vim/home/svn/project/conf/authz
,輸入如下內容
[groups] ? ? ? ? ? ?
#用戶組
admin = admin,root,test ?
#用戶組所對應的用戶
[/] ? ? ? ? ? ? ? ?
#庫目錄權限
@admin = rw ? ? ? ?
#用戶組權限
*=r ? ? ? ? ? ? ?
#非用戶組權限
[groups]配置段中配置行格式為: <用戶組> = <用戶列表>
版本庫路徑權限段的段名格式為: [<版本庫名>:<路徑>]
,如果為 [/]
表示整個svn目錄,通常用單庫svnserver方式
配置用戶口令文件passwd,輸入如下內容:
[users]
# harry = harryssecret
# sally = sallyssecret
admin = Admin1234
root = root1234
test = test1234
配置svn服務綜合配置文件svnserver.conf
[general]
#匿名訪問的權限,可以是read,write,none,默認為read
anon-access=none
#使授權用戶有寫權限
auth-access=write
#使用哪個文件作為賬號文件
password-db=passwd
#使用哪個文件作為權限文件
authz-db=authz
#認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字
realm=/home/svn/project
該文件僅由一個[general]配置段組成。
anon-access: 控制非鑒權用戶訪問版本庫的權限,取值范圍為"write"、"read"和"none"。 即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。 缺省值:read
auth-access: 控制鑒權用戶訪問版本庫的權限。取值范圍為"write"、"read"和"none"。 即"write"為可讀可寫,"read"為只讀,"none"表示無訪問權限。 缺省值:write
authz-db: 指定權限配置文件名,通過該文件可以實現以路徑為基礎的訪問控制。 除非指定絕對路徑,否則文件位置為相對conf目錄的相對路徑。 缺省值:authz
realm: 指定版本庫的認證域,即在登錄時提示的認證域名稱。若兩個版本庫的 認證域相同,建議使用相同的用戶名口令數據文件。 缺省值:一個UUID(Universal Unique IDentifier,全局唯一標示)。
然后就可以啟動SVN服務器了,命令為:
svnserve -d -r 目錄 --listen-port 端口號
-r: 配置方式決定了版本庫訪問方式。
--listen-port: 指定SVN監聽端口,不加此參數,SVN默認監聽3690
具體而言:
svnserve -d -r /home/svn/project/
-r參數配置不同,SVN啟動方式不同,SVN可以以兩種不同的方式訪問。
第一種:-r直接指定到版本庫,這種模式稱為單庫svnserver方式
svnserve -d -r /home/svn/project/
authz配置文件對應版本庫權限的配置通常為:
[groups]
admin=user1
dev=user2
[/]
@admin=rw
user2=r
這種情況下,一個svnserver只能為一個版本庫工作。訪問地址通常為 svn://192.168.0.1/
,這樣就可以方位project版本庫了
第二種:-r指定版本庫的上級目錄,稱為多庫svnserve方式
svnserve -d -r /home/svn
這種情況下,一個svnserve可以為多個版本庫工作,但創建情況與上面講解的內容有所不同,需要做一些調整。
authz配置文件中對版本庫的權限配置通常為:
[groups]
admin=user1
dev=user2
[project:/]
@admin=rw
user2=r
[project01:/]
@admin=rw
user2=r
如果此時你還用[/],則表示所有庫的根目錄,同理,[/src]表示所有庫的根目錄下的src目錄。
使用類似這樣的URL:svn://192.168.0.1/runoob 即可訪問runoob版本庫。
此時可以通過命令查看centos中是否運行起了SVN相應的進程
ps -aux | grep svn
配置防火墻端口,你的SVN進程指定了使用哪個端口,防火墻要相應的開啟它 centos6中防火墻其實是iptables,centos7中防火墻為Firewalld,如SVN默認是3690端口,則防火墻要開放3690端口。配置完防火墻后,記得重啟。
SVN多庫svnserve方式
上面的內容沒有詳細的講清楚SVN多庫模式,即多個SVN版本庫被管理,多庫模式才是實際中常見的模式,所以這里具體來實踐一下,首先mkdir創建多個目錄,然后使用svnadmin在這些目錄下創建對應的版本庫,如下:
mkdir /home/svn/Resource_1
mkdir /home/svn/Resource_2
svnadmin /home/svn/Resource_1
svnadmin /home/svn/Resource_2
接著為了方便配置,將其中一個版本庫中的配置文件拷貝下來,如拷貝Resource_1下的配置文件,這里拷貝到/home/svn/conf中,此時/home/svn/conf中就有如下文件
[root@localhost conf]# ls
authz ?passwd ?svnserve.conf
[root@localhost conf]# pwd
/home/svn/conf
先修改authz文件,規則一樣,<用戶組>=<用戶名>,不同的SVN版本庫可以指定不同的用戶組,給予不同的權限,如下
[groups]
admin=root
user=test
[Resource_1:/]
@admin=rw
[Resource_2:/]
@user=rw
上面的配置指明,admin用戶組下的用戶才有權限操作Resource1,而user用戶組下的用戶才有權限操作Resource2,admin用戶組下只有一個名為root的用戶,user用戶組下只有一個名為test的用戶。
接著編輯passwd文件,定義不同用戶的賬號和密碼
[users]
root=root123
test=test123
最后編寫總配置文件svnserve.conf,指定要使用的配置文件,svnserve.conf關鍵配置如下:
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
最后,最重要的就是SVN啟動方式,啟動時要指定svn版本庫的上層目錄,然后還要指定對應的配置文件
svnserve -d -r /home/svn/ --config-file /home/svn/conf/svnserve.conf
這樣所有版本庫對應的配置都是 /home/svn/conf/svnserve.conf
,管理起來非常方便。
使用SVN客戶端
windows的SVN客戶端使用比較簡單,因為有比較成熟的客戶端,使用比較簡單,本人使用的為Mac,在Mac下當然也有SVN客戶端,但我更喜歡命令行,所以使用的方式都是以命令行的方式進行的。
Mac下安裝SVN客戶端
brew install svn
第一步檢出checkout,復制版本庫,在本地生成對應的副本
svn checkout svn://192.168.100.62 --username=admin
https://raw.githubusercontent.com/ayuLiao/images/master/svn1.png
修改自己的工作副本,如通過touch來創建一個名為test的文件,使用add命令加載進內容,然后再用commit命令將add命令添加的內容體檢,簡單命令如下:
svn add test.txt
svn commit -m 'touch test.txt'
命令非常簡單。
如果你與多人合作,此時在編寫代碼時,一個好的習慣就是在編寫前update一下SVN項目,保證自己工作副本中的代碼是最新的。
svn update .
小結
考慮字數原因,到這里就先系統的介紹SVN服務端與客戶端的情況,下一篇會通過shell與python分別寫兩個思路不同的腳本來實現自動上傳
參考文章
SVN 教程http://www.runoob.com/svn/svn-tutorial.html
CentOS 7 安裝配置SVN服務器http://www.lxweimin.com/p/4e3dd253a209