SVN自動化

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一步完成

    1. yum install -y subversion

  • 創建一個目錄,使用svnadmin將其設為SVN的版本庫

    1. mkdir -p /home/svn/project

    2. svnadmin create /home/svn/project/


  • svnadmin將該目錄設置為版本庫后,就會在該目錄中生成相應的文件,這里會在 /home/svn/project生成相應的目錄,其中conf目錄下有三個比較重要的文件,分別為: authz權限配置文件 passwd用戶名口令文件 svnserver.conf svn服務綜合配置文件



  • 配置authz, vim/home/svn/project/conf/authz,輸入如下內容


    1. [groups] ? ? ? ? ? ?

    2. #用戶組

    3. admin = admin,root,test ?

    4. #用戶組所對應的用戶

    5. [/] ? ? ? ? ? ? ? ?

    6. #庫目錄權限

    7. @admin = rw ? ? ? ?

    8. #用戶組權限

    9. *=r ? ? ? ? ? ? ?

    10. #非用戶組權限

    [groups]配置段中配置行格式為: <用戶組> = <用戶列表>版本庫路徑權限段的段名格式為: [<版本庫名>:<路徑>],如果為 [/]表示整個svn目錄,通常用單庫svnserver方式

  • 配置用戶口令文件passwd,輸入如下內容:

    1. [users]

    2. # harry = harryssecret

    3. # sally = sallyssecret

    4. admin = Admin1234

    5. root = root1234

    6. test = test1234

  • 配置svn服務綜合配置文件svnserver.conf

    1. [general]

    2. #匿名訪問的權限,可以是read,write,none,默認為read

    3. anon-access=none

    4. #使授權用戶有寫權限

    5. auth-access=write

    6. #使用哪個文件作為賬號文件

    7. password-db=passwd

    8. #使用哪個文件作為權限文件

    9. authz-db=authz

    10. #認證命名空間,subversion會在認證提示里顯示,并且作為憑證緩存的關鍵字

    11. 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服務器了,命令為:


    1. svnserve -d -r 目錄 --listen-port 端口號

    -r: 配置方式決定了版本庫訪問方式。

    --listen-port: 指定SVN監聽端口,不加此參數,SVN默認監聽3690

    具體而言:

    1. svnserve -d -r /home/svn/project/

    -r參數配置不同,SVN啟動方式不同,SVN可以以兩種不同的方式訪問。

    第一種:-r直接指定到版本庫,這種模式稱為單庫svnserver方式

    1. svnserve -d -r /home/svn/project/

    authz配置文件對應版本庫權限的配置通常為:

    1. [groups]

    2. admin=user1

    3. dev=user2

    4. [/]

    5. @admin=rw

    6. user2=r

    這種情況下,一個svnserver只能為一個版本庫工作。訪問地址通常為 svn://192.168.0.1/,這樣就可以方位project版本庫了

    第二種:-r指定版本庫的上級目錄,稱為多庫svnserve方式

    1. svnserve -d -r /home/svn

    這種情況下,一個svnserve可以為多個版本庫工作,但創建情況與上面講解的內容有所不同,需要做一些調整。

    authz配置文件中對版本庫的權限配置通常為:

    1. [groups]

    2. admin=user1

    3. dev=user2

    4. [project:/]

    5. @admin=rw

    6. user2=r


    7. [project01:/]

    8. @admin=rw

    9. user2=r

    如果此時你還用[/],則表示所有庫的根目錄,同理,[/src]表示所有庫的根目錄下的src目錄。

    使用類似這樣的URL:svn://192.168.0.1/runoob 即可訪問runoob版本庫。

    此時可以通過命令查看centos中是否運行起了SVN相應的進程

    1. ps -aux | grep svn

  • 配置防火墻端口,你的SVN進程指定了使用哪個端口,防火墻要相應的開啟它 centos6中防火墻其實是iptables,centos7中防火墻為Firewalld,如SVN默認是3690端口,則防火墻要開放3690端口。配置完防火墻后,記得重啟。

  • SVN多庫svnserve方式

    上面的內容沒有詳細的講清楚SVN多庫模式,即多個SVN版本庫被管理,多庫模式才是實際中常見的模式,所以這里具體來實踐一下,首先mkdir創建多個目錄,然后使用svnadmin在這些目錄下創建對應的版本庫,如下:

    1. mkdir /home/svn/Resource_1

    2. mkdir /home/svn/Resource_2

    3. svnadmin /home/svn/Resource_1

    4. svnadmin /home/svn/Resource_2

    接著為了方便配置,將其中一個版本庫中的配置文件拷貝下來,如拷貝Resource_1下的配置文件,這里拷貝到/home/svn/conf中,此時/home/svn/conf中就有如下文件

    1. [root@localhost conf]# ls

    2. authz ?passwd ?svnserve.conf

    3. [root@localhost conf]# pwd

    4. /home/svn/conf

    先修改authz文件,規則一樣,<用戶組>=<用戶名>,不同的SVN版本庫可以指定不同的用戶組,給予不同的權限,如下

    1. [groups]


    2. admin=root

    3. user=test


    4. [Resource_1:/]

    5. @admin=rw


    6. [Resource_2:/]

    7. @user=rw

    上面的配置指明,admin用戶組下的用戶才有權限操作Resource1,而user用戶組下的用戶才有權限操作Resource2,admin用戶組下只有一個名為root的用戶,user用戶組下只有一個名為test的用戶。

    接著編輯passwd文件,定義不同用戶的賬號和密碼

    1. [users]

    2. root=root123

    3. test=test123

    最后編寫總配置文件svnserve.conf,指定要使用的配置文件,svnserve.conf關鍵配置如下:

    1. [general]

    2. anon-access = none

    3. auth-access = write

    4. password-db = passwd

    5. authz-db = authz

    最后,最重要的就是SVN啟動方式,啟動時要指定svn版本庫的上層目錄,然后還要指定對應的配置文件

    1. 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客戶端

    1. brew install svn

  • 第一步檢出checkout,復制版本庫,在本地生成對應的副本

    1. svn checkout svn://192.168.100.62 --username=admin

    https://raw.githubusercontent.com/ayuLiao/images/master/svn1.png

  • 修改自己的工作副本,如通過touch來創建一個名為test的文件,使用add命令加載進內容,然后再用commit命令將add命令添加的內容體檢,簡單命令如下:

    1. svn add test.txt

    2. svn commit -m 'touch test.txt'

    命令非常簡單。

  • 如果你與多人合作,此時在編寫代碼時,一個好的習慣就是在編寫前update一下SVN項目,保證自己工作副本中的代碼是最新的。

    1. svn update .

    小結

    考慮字數原因,到這里就先系統的介紹SVN服務端與客戶端的情況,下一篇會通過shell與python分別寫兩個思路不同的腳本來實現自動上傳

    參考文章

    SVN 教程http://www.runoob.com/svn/svn-tutorial.html

    CentOS 7 安裝配置SVN服務器http://www.lxweimin.com/p/4e3dd253a209

    ?著作權歸作者所有,轉載或內容合作請聯系作者
    • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
      沈念sama閱讀 227,663評論 6 531
    • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
      沈念sama閱讀 98,125評論 3 414
    • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
      開封第一講書人閱讀 175,506評論 0 373
    • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 62,614評論 1 307
    • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
      茶點故事閱讀 71,402評論 6 404
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
      開封第一講書人閱讀 54,934評論 1 321
    • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
      沈念sama閱讀 43,021評論 3 440
    • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
      開封第一講書人閱讀 42,168評論 0 287
    • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
      沈念sama閱讀 48,690評論 1 333
    • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
      茶點故事閱讀 40,596評論 3 354
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
      茶點故事閱讀 42,784評論 1 369
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
      沈念sama閱讀 38,288評論 5 357
    • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
      茶點故事閱讀 44,027評論 3 347
    • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
      開封第一講書人閱讀 34,404評論 0 25
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 35,662評論 1 280
    • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
      沈念sama閱讀 51,398評論 3 390
    • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
      茶點故事閱讀 47,743評論 2 370

    推薦閱讀更多精彩內容