1. 程式人生 > >macbook SVN 版本控制工具的使用

macbook SVN 版本控制工具的使用

Apache Subversion 通常被縮寫成 SVN,是一個開放原始碼的版本控制系統。

在 Linux 系統上安裝 svn 很簡單,執行 yum install subversion 即可。

而在 mac 電腦上自帶 svn,可使用命令 svn --version 檢視版本,筆者的是
svn, version 1.9.4 (r1740329)
compiled Apr 10 2017, 20:36:46 on x86_64-apple-darwin15.0.0

無論什麼系統,使用 svn 都是差不多的。

一、建立程式碼倉庫

先在 /Users/jason/ 目錄下新建一個 svn 目錄,以後可以在這個目錄下建立多個倉庫目錄;
開啟終端,建立一個mycode倉庫,輸入指令:svnadmin create /Users/jason/svn/mycode


建立成功後會在 mycode 資料夾下面出現多個檔案和目錄,這是用來控制版本的,說明倉庫已經建好。

二、配置svn的使用者和許可權

主要是修改/svn/mycode/conf目錄下的三個檔案
svnserve.conf –> svn服務的配置
passwd –> 設定使用者名稱和密碼
authz –> 使用者組許可權管理

1、 開啟svnserve.conf,將下列配置項前面的#和空格都去掉(注意空格一定要去掉)
這幾行配置所在行第一個字母前不能有任何空格,配置項等號左右兩邊各一個空格。配置項後面也不要緊跟著#之類的註釋字元,否則會報錯。

anon-access = read
auth-access = write
password-db = passwd
authz-db = authz

anon-access = read代表匿名訪問的時候是隻讀的,若改為anon-access = none代表禁止匿名訪問,需要帳號密碼才能訪問。

2、 開啟 passwd,在[users]下面新增帳號和密碼

[users]
jason = 123456
guest = 123456

一個賬號是 jason,密碼是123456
一個賬號是 guest,密碼是123456

3、開啟authz,配置使用者組和許可權
我們可以將在 passwd 裡新增的使用者分配到不同的使用者組裡,以後的話,就可以對不同使用者組設定不同的許可權,沒有必要對每個使用者進行單獨設定許可權。
- 配置使用者組
在[groups]下面新增組名和使用者名稱,多個使用者之間用逗號(,)隔開
[groups]


mygroup = jason,guest
說明 jason 和 guest 同在 mygroup 這個組,下面再進行許可權配置。
- 配置許可權
使用[/]代表svn伺服器中的所有資源庫
[/]
@mygroup = rw
上面的配置說明 mygroup 這個組中的所有使用者對所有資源庫都有讀寫(rw)許可權,組名前面要用@;如果是使用者名稱,不用加@,比如 jason 這個使用者有讀寫許可權
[/]
jason = rw

4、 啟動svn伺服器
在終端輸入下列指令:svnserve -d -r /Users/jason/svn
或者輸入:svnserve -d -r /Users/jason/svn/mycode
沒有任何提示就說明啟動成功了
可以通過 ps -A | grep svnserve檢視有沒有啟動,如果有啟動,就會有一個執行緒。

5、 關閉svn伺服器
關閉svn伺服器,可以通過活動監視器,找到 svnserve 程序,結束它;
或是通過 ps -A | grep svnserve,查出執行緒號,直接 kill 掉;
或是簡單直接的 killall svnserve

注:首次配置完先關閉svn伺服器再進行資料的上傳和下載操作。

三、使用svn客戶端功能

1. 從本地匯入程式碼到伺服器(第一次初始化匯入)

在終端中輸入
svn import /Users/jason/Desktop/test svn://localhost/mycode/test --username=jason --password=123456 -m "第一次匯入"
將/Users/jason/Desktop/test中的所有內容,上傳到伺服器 mycode 倉庫的 test 目錄下,後面雙引號中的”第一次匯入”是註釋

匯入到伺服器上的檔案在 svn/mycode/test 裡面的資料夾裡是找不到的,那麼,檔案到底提交到哪去了呢?SVN在伺服器端的儲存方式和客戶端是不一樣的,在伺服器端是看不到原始檔的。SVN伺服器端預設採用的FSFS格式儲存檔案,這些資料存放在版本庫的 db 目錄中,裡面的 revs 和 revprops 分別存放著每次提交的差異資料和日誌等資訊,而且它是將每次 commit 的內容以增量方式存放的,每個增量包存成1個檔案,這個增量包中包括了這次commit的全部資料。

2. 從伺服器端下載程式碼到客戶端本地

在終端中輸入
svn checkout svn://localhost/mycode --username=jason --password=123456 /Users/jason/Desktop/test
將伺服器中 mycode 倉庫的內容下載到 /Users/jason/Desktop/test 目錄中

checkout 到本地資料夾的檔案會有一個 .svn 的隱藏資料夾,表示這個資料夾是受 svn 控制的,.svn 裡面是版本控制的元資料資訊。

要匯入檔案有兩種做法:
(1) 用import指令,將客戶端資料夾匯入到伺服器端
(2) 先checkout空庫到客戶端,然後將要匯入的資料夾放入客戶端checkout產生的空資料夾,然後執行add將這些資料夾納入SVN控制,最後執行commit上傳到伺服器。

第一步是從本地檔案到伺服器檔案的關聯,第二步是從伺服器到本地檔案的關聯,這兩步都是使伺服器和本地產生關聯;
使用 svn 一定要明確兩個概念:倉庫和工作區
倉庫指的是伺服器上的程式碼倉庫,比如這裡的 mycode 目錄;
工作區是指每一臺電腦上具體的工作目錄,比如這裡的 test 目錄。

3. 提交程式碼到伺服器

在步驟2中已經將伺服器端的程式碼都下載到了 /Users/jason/Desktop/test 目錄中,現在增加一個 readme.txt,然後提交到伺服器

(1) 開啟終端,先定位到 /Users/jason/Desktop/test 目錄,建立一個 readme.txt 檔案;

(2) 輸入提交指令:svn add readme.txt; 把新建立的檔案新增到快取區;

(3) 輸入提交指令:svn commit -m "第二次提交,增加了readme.txt"

可以看到終端的列印資訊:

Adding (bin) readme.txt
Transmitting file data .done
Committing transaction…
Committed revision 2.

4. 更新伺服器端的程式碼到客戶端

這個應該是最簡單的指令了,就是把伺服器上最新的版本更新下來,在終端中定位到客戶端程式碼目錄後,比如上面的 /Users/jason/Desktop/test 目錄,然後再輸入指令:svn update
一般提交之前需先更新,否則別人上傳的新版本你沒有更新下來就會被覆蓋,別人上傳的就丟失了。

5. 瞭解 svn 的更多用法,在終端輸入:svn help

注:

1、系統自帶的svn無法支援本地刪除檔案的更新,即當本地刪除檔案後去更新伺服器的檔案時,刪除的檔案又從伺服器上的資料夾中下載到你的本地資料夾中。但是它是支援檔案修改後的更新操作的。
2、記得寫註釋,否則系統不會識別命令。