天天看點

linux與 windows環境的Subversion版本控制企業架構搭建之svn+ssh

1、前言

1.1、需求和目的

公司要求引入版本管理伺服器對兩大對象進行管理:

1)針對windows環境的開發人員的源代碼做版本控制。

2)針對linux伺服器的配置檔案做版本控制。

本章将使用svn+ssh協定的方式完成檔案的版本控制。

1.2、系統架構模式描述

1)linux的伺服器端

伺服器端通過ssh協定提供版本控制服務(port:tcp22)

2)linux&windows的用戶端

linux以配置檔案版本控制用戶端的角色出現

windows以開發者版本控制用戶端的角色出現

2、理論部分

SVN是Subversion的簡稱,是一個開放源代碼的版本控制系統,相較于RCS、CVS,它采用了分支管理系統,它的設計目标就是取代CVS。網際網路上很多版本控制服務已從CVS遷移到Subversion。

3、實踐部分

3.1、主機資訊

svnSer:

ipaddress=10.168.0.176

hostname=svnSer

linux client:

ipaddress=10.168.0.8

hsotname=client

windows Client:

ipaddress=10.168.0.x

hostname=will2

3.2、yum包的安裝

In svnSer & Linux Client

1

<code>yum -y </code><code>install</code> <code>subversion</code>

其他包安裝:

<code>yum -y </code><code>install</code> <code>tree</code>

3.3、linux服務端、用戶端的配置

3.3.1、step1

In svnSer:

定義倉庫檔案夾:

2

3

<code>svnadmin create </code><code>/var/local/svn</code>

<code>ls</code> <code>/var/local/svn</code>

<code>tree </code><code>/var/local/svn</code>

注意"revprops"節點(版本控制内容)

3.3.2、step2

定義權限控制

4

5

6

7

<code>ll </code><code>/var/local/svn</code>

<code>groupadd -g 5000 svngroup</code>

<code>chgrp</code> <code>-R svngroup </code><code>/var/local/svn</code>

<code>ll </code><code>/var/local/svn/db/</code>

<code>chmod</code> <code>g+w -R </code><code>/var/local/svn/db/</code>

<code>chmod</code> <code>o= -R </code><code>/var/local/svn/db/</code>

定義隻有svngroup組對“/var/local/svn/db/”有寫的權限,其他使用者沒有任何權限

3.3.3、step3

定義svn使用者

8

9

10

<code>useradd</code> <code>stan</code>

<code>echo</code> <code>willp | </code><code>passwd</code> <code>--stdin will</code>

<code>useradd</code> <code>natasha</code>

<code>echo</code> <code>natashap | </code><code>passwd</code> <code>--stdin natasha</code>

<code>usermod</code> <code>-G svngroup will</code>

<code>usermod</code> <code>-G svngroup natasha</code>

<code>#usermod -aG svngroup will</code>

<code>#usermod -aG svngroup natasha</code>

<code>id</code> <code>will</code>

<code>id</code> <code>natasha</code>

3.3.4、step4

檢查檔案目錄權限

<code>ll -d </code><code>/var/local/svn</code>

确認組隻有讀權限

<code>ll -d </code><code>/var/local/svn/db</code>

确認組有讀寫權限

确認檔案有讀寫權限

3.3.5、step5

上傳檔案測試

1)配置需要的環境變量:

<code>su</code> <code>- will</code>

<code>vim ~/.bashrc</code>

輸入如下内容:

<code>export</code> <code>EDITOR=</code><code>vi</code>

2)建立測試源:

<code>cp</code> <code>-r </code><code>/etc/</code> <code>/home/will/</code>

<code>tree </code><code>/home/will/etc</code>

<code>cd</code> <code>/home/will/</code>

<code>svn </code><code>import</code> <code>etc/ </code><code>file</code><code>:</code><code>///var/local/svn/etc</code>

輸入:

<code>i</code>

<code>import</code> <code>svn etc v1</code>

<code>#ESC鍵</code>

<code>:wq</code>

3.3.6、step6

下載下傳測試

<code>rm</code> <code>-rf etc/</code>

<code>svn checkout </code><code>file</code><code>:</code><code>///var/local/svn/etc</code>

<code>tree etc/</code>

3.3.7、step7

In Client:

建立測試使用者并配置環境變量

<code>useradd</code> <code>will</code>

<code>echo</code> <code>willpw | </code><code>passwd</code> <code>--stdin will</code>

<code>echo</code> <code>natashapw | </code><code>passwd</code> <code>--stdin natasha</code>

配置需要的環境變量:

<code>svn checkout svn+</code><code>ssh</code><code>:</code><code>//10</code><code>.168.0.176</code><code>/var/local/svn/etc</code>

輸入svnSer伺服器端will的使用者密碼(注意不是本機的will使用者密碼)

3.3.8、step1

檢查下載下傳的檔案

3.3.9、step9

設定自動認證

1)ssh-keygen生成一對秘鑰

<code>ssh</code><code>-keygen</code>

以上一直回車就好

2)把公鑰複制給svnSer

<code>ssh-copy-id -i ~/.ssh/id_rsa.pub will@</code><code>10.168</code><code>.</code><code>0.176</code>

輸入svnSer伺服器端stan的使用者密碼(注意不是本機的stan使用者密碼)

3)測試自動認證

<code>rm</code> <code>-rf etc</code>

<code>ls</code>

3.3.10、step10

In svnSer

版本資訊更新測試

1)新svn檔案

vim編輯/home/will/etc/sysconfig/network

更改前:

<code>HOSTNAME=svn.cmdschool.org</code>

更改後:

<code>HOSTNAME=svn001.cmdschool.org</code>

更改以上參數

2)上傳svn檔案

<code>cd</code> <code>/home/will/etc</code>

<code>svn commit</code>

<code>modify network</code>

3.3.11、step11

In Client

用戶端下載下傳svn檔案

1)先檢查用戶端配置檔案

<code>cat</code> <code>/home/will/etc/sysconfig/network</code>

2)更新svn檔案

<code>svn update</code>

3)檢查svn更新結果

3.3.12、step12

用戶端下載下傳某個版本的svn檔案

1)清理目前的svn檔案

<code>cd</code> <code>..</code>

2)檢出標明的版本svn檔案

<code>svn checkout -r 1 svn+</code><code>ssh</code><code>:</code><code>//10</code><code>.168.0.176</code><code>/var/local/svn/etc</code>

以上檢出版本1的檔案

3.3.13、step13

用戶端svn檔案更新

增加一個新檔案

<code>echo</code> <code>"test"</code> <code>&gt; </code><code>/home/will/etc/test</code><code>.txt</code>

3)上傳新檔案

<code>svn add </code><code>/home/will/etc/test</code><code>.txt</code>

<code>cd</code> <code>/home/will/etc/</code>

<code>Client add </code><code>file</code> <code>to svnSer</code>

3.3.14、step14

svn檔案删除

1)svn檔案的删除

<code>svn del </code><code>/home/will/etc/test</code><code>.txt</code>

<code>del </code><code>test</code><code>.txt </code><code>file</code>

2)用戶端檢出删除的結果

<code>ls</code> <code>/home/will/etc/test</code><code>.txt</code>

3.3.15、step16

svn檔案重命名

1)重命名

<code>cd</code> <code>/home/will/etc/sysconfig/</code>

<code>svn </code><code>mv</code> <code>network network.save</code>

<code>mv</code> <code>filename</code>

2)用戶端檢出重命名的結果

<code>ls</code> <code>/home/will/etc/sysconfig/network</code><code>.save</code>

3)svn版本復原

<code>svn update -r 3</code>

以上復原到第3版本

3.3.16、step16

簡化日志輸入

<code>svn update -r 4</code>

<code>svn commit -m </code><code>"r to v4"</code>

3.3.17、step17

svn日志檢視

<code>svn log</code>

3.4、windows用戶端的配置

3.4.1、step1

In window Client:

設定公鑰認證:

1)下載下傳putty

<a href="http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip" target="_blank">http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip</a>

解壓到D盤根目錄:

<a href="http://s3.51cto.com/wyfs02/M02/75/96/wKiom1Y8m42SU646AAIP9ga_i68806.jpg" target="_blank"></a>

2)生成公鑰和私鑰

<a href="http://s3.51cto.com/wyfs02/M00/75/96/wKiom1Y8nDbSy7AKAAFGwWFCcEA942.jpg" target="_blank"></a>

注:以上需要在界面上移動滑鼠(筆者超級奇怪,剛才是沒有看清楚!)

3)儲存公鑰和私鑰到“d:\putty”

<a href="http://s3.51cto.com/wyfs02/M01/75/93/wKioL1Y8n0nD6B-fAAJ1lqBbFWw379.jpg" target="_blank"></a>

儲存結果如下:

<a href="http://s3.51cto.com/wyfs02/M02/75/93/wKioL1Y8n4fxWF4CAAKE6_JABM4920.jpg" target="_blank"></a>

3.4.2、step2

測試公鑰認證:

1)把公鑰複制到伺服器端:

<a href="http://s3.51cto.com/wyfs02/M00/75/97/wKiom1Y80WvxvrqjAAC2yMFCJIc533.jpg" target="_blank"></a>

2)設定認證的公鑰:

IN svnSer:

執行如下指令将公鑰加入到認證檔案:

<code>cat</code> <code>/home/will/pubkey</code> <code>&gt;&gt; </code><code>/home/will/</code><code>.</code><code>ssh</code><code>/authorized_keys</code>

vim編輯/home/will/.ssh/authorized_keys

編輯前:

<a href="http://s3.51cto.com/wyfs02/M01/75/97/wKiom1Y81PrCwZG1AANIrWLzmpk907.jpg" target="_blank"></a>

以上光标處開始共9行,保留第3-8行,其餘删除,并将3-8行合并為一行。

編輯後:

<a href="http://s3.51cto.com/wyfs02/M01/75/94/wKioL1Y81T2AYp3AAAM_FoXxqYk802.jpg" target="_blank"></a>

以上加入頭部“ssh-rsa”與尾部客戶“使用者名@主機名”即“[email protected]

注:以上加入公鑰方法本人覺得麻煩,windows到linux有更好的方法請告知我!

3)添加認證所需的私鑰

In windows Client:

<a href="http://s3.51cto.com/wyfs02/M02/75/94/wKioL1Y80vqRLjD2AAHzj8ycuAI751.jpg" target="_blank"></a>

4)設定測試資訊

<a href="http://s3.51cto.com/wyfs02/M02/75/97/wKiom1Y80objZ1rHAAIMpFgDxvU256.jpg" target="_blank"></a>

見到如下資訊表示公鑰認證成功:

<a href="http://s3.51cto.com/wyfs02/M02/75/97/wKiom1Y81oWQf9k-AACc4NSRgqs976.jpg" target="_blank"></a>

3.4.3、step3

下載下傳并安裝svn

1)下載下傳并安裝

下載下傳位址:

<a href="http://tortoisesvn.net/downloads.html" target="_blank">http://tortoisesvn.net/downloads.html</a>

由于windowsn的安裝都是無師自通,本教程省略,安裝完成圖例如下:

<a href="http://s3.51cto.com/wyfs02/M01/75/96/wKiom1Y8nPbh4rZ1AAF3kGwkfWo187.jpg" target="_blank"></a>

檔案夾郵件菜單圖例:

<a href="http://s3.51cto.com/wyfs02/M02/75/96/wKiom1Y8nZHhoHNiAAECEKxVEjI887.jpg" target="_blank"></a>

以上兩張圖證明svn安裝成功

3.4.4、step4

設定svn認證:

右鍵單擊要檢出到的檔案夾-&gt;TortoiseSVN -&gt; Settings -&gt; Network

1)樣例一

公鑰認證

并添加如下公鑰認證樣例:

<code>"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe"</code> <code>-l will -i D:\putty\privatekey.ppk</code>

詳細如下:

<a href="http://s3.51cto.com/wyfs02/M01/75/95/wKioL1Y83uSSRKkoAAL4PmMZUjs919.jpg" target="_blank"></a>

常用參數:

-pw 輸入登入svn伺服器的密碼

-l  輸入登入svn伺服器的使用者名

-i  輸入認證的私鑰

2)樣例二

公鑰認證顯式使用者名和密碼自動登入樣例(不安全):

"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe" -pw password -l username

3)樣例三

手動鍵入密碼的樣例(太麻煩):

<code>"C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe"</code> <code>-l username</code>

3.4.5、step5

檢出記錄

<a href="http://s3.51cto.com/wyfs02/M01/75/E8/wKioL1ZEk3CAjGTzAADWBeExRdw069.png" target="_blank"></a>

如上圖所示:

檔案夾單擊[SVN Checout]

<a href="http://s3.51cto.com/wyfs02/M00/75/E8/wKioL1ZEk2yzszD1AABHYkUwk8M804.png" target="_blank"></a>

填入檢出路徑:"svn+ssh://[email protected]/var/local/svn/etc"

以上内容意義:

協定:svn+ssh://

使用者名:will

路徑:10.168.0.176/var/local/svn/etc

<a href="http://s4.51cto.com/wyfs02/M02/75/EA/wKiom1ZEkyOinvg-AACNlI7g2Yc562.png" target="_blank"></a>

檔案檢出中……

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1710315,如需轉載請自行聯系原作者

繼續閱讀