【分享】 Synology NAS SVN Server 套件搭配TortoiseSVN 心得

各位大大好,小的平常都在Mobile01潛水,這是我第一次發文,有講錯的地方還請多多包涵,謝謝!

【前言】
昨天晚上突然在DSM的套件中心裡發現了SVN的套件,之前在DSM 4.3 beta發佈前的發表會上有提到4.3有支援Git Sever套件(Git Server也是一個版本控制的軟體跟SVN的架構有些不同,特別是在管理大型Project時Git Server會比SVN Server來的容易管理)以及SVN套件,可是在4.3 beta發佈時只看見Git Server套件,卻沒有看見SVN套件,後來4.3 正式版出來後我也就沒有特別去注意,直到昨天無聊點進套件中心看看時發現SVN套件已經出來了!(更新完4.3正式版後,其實我沒特別去注意到底有新增那些東西

【SVN簡介】

SVN套件對許多寫程式的人來說可說是相當方便!

首先,先來簡單的描述一下SVN

SVN的全名是「Subversion」,大家都習慣以”SVN”來稱呼,簡單來說他的主要功能是用當作版本控制用的,這對寫程式的人來說可能常常會遇到Code一下改來改去的,有時候把之前明明已經寫好的或是已經寫告一段落的Code不小心改掉了,想要回復到之前寫的Code可是又無法復原到之前的狀態,不管按了Ctrl+Z多少次,都回不去啦!~剛好又沒有把之前完成或告一段落的Code存到其他地方去,這時候只好硬著頭皮再重寫一次了!

或者是在大型Project中,對於多人開發的環境下常常會遇到的就是與其他人開發者發生檔案互相覆蓋的情形發生;既然SVN是一個版本控制的系統也有人用來比較不同版本的程式碼有甚麼差異等情況。

SVN Server就是因為這些需求所誕生的!其實最早是從CVS演化來的,這裡就不多說了,如果想要知道更多它的由來或是定義可以在wiki上找到。

上面舉的例子可能都是在講寫程式的人,可能有人會問說我沒有再Coding,那我是不是用不到SVN套件這功能?其實你可能也會用的到,有時候在做報告或是處理文件,或是編輯影片跟編輯圖片,有可能也會遇到有多個版本要處理的情況,怕現在要繼續寫的文件內容不夠好,或是寫完一份文件修了再修,導致有多個版本的產生。

當我還沒知道SVN這個東西時,我自己要是有多個版本產生,通常會在檔名最後面加上v1、v2、v3……等依序遞增上去,來區別每一個版本的不同。

大約在三、四個月前,藉由我的一位朱姓長官得知有SVN這個功能,當時在Synology的NAS上並沒有推出SVN這個套件功能,我則是透過網路上的教學,透過ipkg的方式來安裝SVN Server,但是現在套件中心中已經有SVN套件摟!(前提要將DSM版本更新至最新的4.3正式版)對於要使用的人來說可說是相當方便,畢竟透過ipkg要下一些指令,對於不是那麼熟悉終端機操作的人來說在方便也不過了!

【SVN Server端及Client端設定】

本文章於SVN簡單的分為三個部分來分享:

一、在DSM上安裝SVN套件
二、在PC上安裝SVN Client端軟體 (TortoiseSVN)
三、關於SVN的基本操作


一、在DSM上安裝SVN套件

1.首先,先打開DSM裡面的套件中心,在左邊的「公用程式」中可以發現「SVN」套件的身影(當然您也可以在左側的「全部」欄位裡頭找到)

※註:如果您在套件中心中找不到「SVN」套件,請先確認DSM版本是否為4.3正式版,(關於DSM版本查詢:在DSM中點選「控制台」→「系統更新」即可得知)


2.點進「SVN」套件後可以看到一些簡單的說明,開發者是Apache Software Foundation,目前的版本是「1.7.8-0003」,接著點選「安裝套件」


3.在點選完「安裝套件」後,會出現「SVN-安裝套件」的小視窗,這裡要建立一個共用資料夾來存放SVN的相關資料,如果沒有特別指定可以不用輸入,系統會以「svn」作為命名,接著點選「下一步」。


4.接著會出現「再次檢查設定」的視窗畫面,如果對於內容沒有甚麼問題,點選「套用」即可完成安裝!若有勾選「安裝完成後立即啟動」,會在選單中出現SVN Server的捷徑。



※註:若是之前有透過ipkg等類似方式安裝過SVN Server(非官方套件),在這裡可能會遇到明明啟用SVN套件後卻又自動關閉的情況,若有遇到此問題,請照下列五個步驟解決(若無則跳過直接看5.):
Step 1:到「套件中心」解除剛剛安裝的「SVN」套件。

Step 2:透過ssh連線(可使用putty軟體)在終端機上,把之前加入初始化svn server的指令給移除,一般位置會是在「/etc/inetd.conf」中的
「svn stream tcp nowait [user name] /opt/bin/svnserver svnserve –i –r /[svn path] 」
給移除掉並儲存。(user name及svn path根據之前自行設定做更改)

Step 3:再來把之前加入的services也移除掉,在「/etc/services」中的
「svn 3690/tcp # Subversion」 及「svn 3690/udp # Subversion」
移除並儲存。(port請依據之前自己設定的做更改)

Step 4:接著reboot系統。

Step 5:在前往「套件中心」重新在安裝一次SVN套件。


5.點進「SVN Server」圖示可以看到控制UI,若點選右上角的「問號」會出現SVN Server的DSM說明內容。



6.接著我們點選左上角的「新增」按鈕來建立一個存放庫,在「一般」這個Tab標籤下輸入「存放庫名稱」我在這邊輸入「test」,在輸入「存放庫名稱」時可以看到最後一欄的「存取網址」會自動出現「svn://youraddress/存放庫名稱」,這個存取網址是等下要在Client端連接的網址,「認證域」這邊可輸入可不輸入,如果有需要的可以自行輸入,這邊做為測試用所以選擇不輸入,「匿名權限」我在這邊是選「無」。


7.再來點選到「使用者」這個Tab標籤來新增使用者,點選「新增」,會發現在下方的「使用者列表」中會新增出一欄,「使用者」名稱是空的,而「密碼」部分會自動隨機幫你產稱生一組8位的密碼,由英文大小寫及數字所組成的;在這裡「使用者」名稱設為「test1」,為了方便等下測試密碼也改為「test1」,輸入完畢後按下「確定」即可。



8.接著可以在SVN Server列表中看到剛剛新增的存放庫。


9. 還記得我們在安裝SVN套件時有新增一個共用資料夾嗎(剛是沒有自訂名稱,所以預設是”svn”)?如果你這時直接打開File Station查看,你會發現找不到svn這個公用資料夾,這時請點到「控制台」→「共用資料夾」,您可以找到「svn」這個共用資料夾,原因是因為您並沒有設定這個共用資料夾的權限,所以預設的情況下您是沒有權限瀏覽這個共用資料夾的;如果要在File Station看到此共用資料夾,只要點選「svn」這個共用資料夾,再點選上方「權限」→「權限設定」,把自己加入權限中即可在File Station上看到此共用資料夾。


接著再透過File Station打開「svn」共用資料夾,可以看到我們剛剛新建的「test」存放庫名稱,點進去可以看到SVN Server的一些檔案。


到以上步驟9個步驟,基本的SVN套件安裝及設定就算完成了!



二、在PC上安裝SVN Client端軟體 (TortoiseSVN)

在Windows上一般大家最常用的SVN Client軟體應該是「TortoiseSVN」,這是一個免費的軟體,把SVN的一些指令作為GUI畫這邊是這軟體的官方網站TortoiseSVN,大家可以進去官網首頁


在上面點選「Downloads」來下載軟體,這軟體目前有支援多達40種語言,根據您的作業系統版本選擇32bit or 64bit版本下載


檔案大小大約18.4MB左右,目前最新的版本為1.8.2版!下載完成後依序點選下一步進行安裝即可!



三、關於SVN的基本操作

1.首先,先在要進行版本控制的目錄下點選右鍵,可以發現多了「SVN Checkout…」跟「TortoiseSVN」這兩個選項,點選「SVN Checkout…」來設定SVN連線。


2.接著會出現Checkout視窗,我們在「URL of repository」輸入剛在建立SVN Server時所出現的「存取位置」,接著按下「OK」


3.此時會出現要您輸入SVN的User name跟Password,把剛剛新增的test1的帳號密碼輸入進去,並把「Save authentication」勾選起來,以便日後登入方便,接著按「OK」


4.接著會出現「Checkout Finished!」的視窗,代表此目錄已經完成設定了,接著點選「OK」,再來可以在目錄上看到多了一個「.svn」的隱藏資料夾,這個隱藏資料夾是用來存放svn的相關設定。這裡不要去動到「.svn」資料夾裡面的東西,因為更動到裡面的檔案有可能會造成svn無法運行!
※註:此隱藏資料夾需要把Windows檔案總管的顯示隱藏資料夾及檔案勾選出來才看的到唷!



5.我們在「svn test」裡再新增一個資料夾並命名為「test1」,接著在裡面新增一個「main.c」檔案,並在「main.c」裡寫一段很簡單的顯示「Hello World」的程式


6.完成之後回到「svn test」目錄,對剛剛新增的資料夾「test1」點選「右鍵」→「TortoiseSVN」→「Add」,接著會出現一個SVN的Add視窗,把這個test1資料夾以及main.c檔案加入倒Repository(Repository指的就是存放庫)中,接著按「OK」


7.此時會出現「Add Finished!」的視窗,表示您已經成功搂!但是這個步驟並沒有將test1資料夾及main.c檔案放入Repository中,只是單純告知svn準備要再Repository中放入這些檔案,接著點選「OK」,我們再回來看到test1這個資料夾,可以發現上面多了一個”+”的圖示。



8.接著我們要把test1資料夾及裡面的main.c與Repository做同步的動作,在test1資料夾點選「右鍵」,這時會看到選單多了「SVN Update」及「SVN Commit」這兩個選項,「SVN Update」這個主要是從Repository更新檔案至目錄的,在這裡先不做討論,我們先點選「SVN Commit」來做同步的動作。


9.接著會跳出Commit的視窗,在Message中我們可以輸入對於這個版本所要備註的內容,你可以寫關於這版本主要在做甚麼或是新增甚麼樣的功能,在之後回復版本的時候就可以查看到這版本在做甚麼,下方是列出你要Commit那些檔案到Repository中,如果你有不想要同步的檔案,可以把它取消打勾,接著點選「OK」來進行Commit


10.接著會出現「Commit Finished!」的視窗,出現這視窗代表你成功將檔案同步到Repository中了,接著點選「OK」後再回到test1這個資料夾,你可以看到在資料夾圖示上出現了一個綠色的打勾圖案。



11.接著我們在打開「test1」資料夾並把原先main.c的內容改掉並按儲存


12.這時我們再回到「svn test」資料夾中可以發現「test1」這個資料夾出現了一個紅色的驚嘆號,這代表說裡面的檔案有被更改過


13.我們在點「test1」資料夾內去看,可以看到main.c這個檔案也是出現驚嘆號,代表這個檔案有被更改過


這時我們可以透過SVN裡的一個「Diff」功能去查看現在這個檔案跟之前的版本有甚麼差異,對「main.c」這個檔案點選「右鍵」→「TortoiseSVN」→「Diff」


14.接著會出現「Tortoise Merge」的視窗,裡面可以清楚比對現在這個版本與之前那個版本有甚麼樣的差異,我們可以發現第6行跟第7行跟之前的那個版本不太一,第6行是被改過的,第7行是新增上去的


15.接著我們在回到main.c的檔案對他進行第二個版本同步,一樣對他點選「右鍵」→「SVN Commit」,接著一樣會出現Commit的視窗,我們對這個版本輸入一些版本訊息,接著點選「OK」


如果出現「Commit Finished!」代表你成功了!我們也可以看到「test1」這個資料夾以及「main.c」這個檔案的圖示已經從紅色驚嘆號轉變為綠色勾勾了!

16.如果我們要查看目前檔案的版本資訊,可以透過SVN裡的「Show Log」功能,一樣對「main.c」檔案點選「右鍵」→「TortoiseSVN」→「Show Log」,這時候會跳出一個「Log Message」的視窗,我們可以看到我們所建立的各種版本,以及每一個版本的備註訊息


17.接著我們來介紹如何還原之前的版本,如果想要還原到Hello World這個程式,我們只要對「main.c」點選「右鍵」→「TortoiseSVN」→「Update to revision」,接著便會出現一個「Update」的視窗,在這裡要是我們不清楚要還原哪個版本的話可以點選「Show log」去查看每一個版本的說明,或是可以直接在「Revision」欄位中直接樹入版本代號,接著點選「OK」


18.若出現「Update Finished!」的視窗畫面代表你成功了!可以看到訊息欄內還原到「revision 1」的版本,接著點選「OK」


19.我們在把main.c打開,會發現已經變回Hello World的程式了!如果要再還原到revision 2的話方法也是一樣的!


這時你也可以回去NAS上看「svn」這個共用資料夾裡面的「test」存放庫中的「db」資料夾,裡面可以找到一些我們剛剛同步的版本相關檔案。

當你檔案做改變的時候,SVN便能判斷出來是否有差異性,我在想它原理應該是透過MD5或是SHA-1之類的Hash Function去計算每一個檔案的是否有被Change過,不過這邊我自己純屬猜測!我就沒有詳細去研究了


SVN 其實還有很多更進階的功能,這在裡就不多做論述,有興趣的可以在SVN Client端軟體中的Help查詢,裡面蠻多資訊以及更深入的內容的!或是透過網路 or 關於Subversion的書籍來閱讀也可以唷!

由於我是第一次發文,如果有講錯的或是講得不好的地方,還請多多包涵搂!謝謝

2013-10-06 13:26 #1
有試過 svn+ssh 嗎?
畢竟經常在兩地不同的地方寫程式,有SVN做版本控管是不錯。不過,透過Internet未作加密傳輸還是不敢拿來用。最近也嚐試用git 但也都沒有成功

toyota790 wrote:
各位大大好,小的平常...(恕刪)



非常棒的分享文,感謝!!
如果這功能穩定會很有用。

deanwang wrote:
有試過 svn+ss...(恕刪)



SVN+SSH

這功能我有用

可以正常使用 請放心服用

1515151515
籌碼集中贏 - http://stocklog.ifa888.com

deanwang wrote:
有試過 svn+ss...(恕刪)


svn+ssh這部分我沒有玩過,不過理論上應該是可以才對!
樓下sfdhkjhf大大有說可以用,所以您可放心摟!

sfdhkjhf wrote:
SVN+SSH這功能...(恕刪)


感謝幫忙補充回覆!謝謝!
感謝教學

不過看介紹文 似乎是使用區網ip

那如果是DDNS 轉址 XXX.no-ip.org

repository 網址 要輸入svn://xxx.no-ip.org/test
會變成沒有權限

不曉得要怎樣設定

sai5555 wrote:
感謝教學

不過看介紹文 似乎是使用區網ip

那如果是DDNS 轉址 XXX.no-ip.org

repository 網址 要輸入svn://xxx.no-ip.org/test
會變成沒有權限

不曉得要怎樣設定



我也遇到同樣的問題

請問SVN server只能在區網中使用嗎?

謝謝
真是受益的文章受用了。謝謝喔
toyota790 wrote:
各位大大好,小的平常...(恕刪)
限制級
您即將進入之討論頁 需滿18歲 方可瀏覽。
提醒:內容可能因過於寫實、驚悚而令人感到不舒服,是否繼續觀看?

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於該限制級網頁,依台灣網站分級推廣基金會規定作標示。
評分
複製連結