版本控制是一種記錄一個或若干文件內(nèi)容變化,以便將來查閱特定版本修訂情況的系統(tǒng)。程序員的工作輸出是代碼,設(shè)計師的工作輸出是設(shè)計文檔,學(xué)生們畢業(yè)的時候會輸出畢業(yè)論文,其他職業(yè)日常工作中也都少不了使用Office軟件輸出各種文檔。我們都清楚,輸出的內(nèi)容都幾乎不可能是一次完成的,期間一定會經(jīng)歷各種修改、迭代、反復(fù)。如果以傳統(tǒng)的方式保留修改記錄,那么你的本地硬盤上一定會存有不同命名的多個相似文件。又或者你只在一個文件上不斷演進(jìn)。無論哪種方式,當(dāng)你想查看曾經(jīng)的修改記錄,對比不同修改間的變化,又或是回溯到之前的一個版本時,都會變得很困難。如果在這個過程中引入版本控制,所有問題就可以迎刃而解了。
版本控制工具有好幾種,對于文檔的管理,我認(rèn)為SVN(Subversion)是最為適合的。無論是團(tuán)隊還是個人,都可以利用SVN高效管理自己的文檔,讓工作和學(xué)習(xí)更加得心應(yīng)手。本文就介紹一下如何在威聯(lián)通NAS上搭建SVN服務(wù)器,并簡單介紹如何使用SVN。
SVN是一種集中化的版本控制系統(tǒng),主要是為了解決團(tuán)隊內(nèi)不同成員協(xié)同工作的問題。在這個系統(tǒng)中有一個單一的集中管理的服務(wù)器,保存所有文件的修訂版本,而協(xié)同工作的人員都通過客戶端連到這臺服務(wù)器,取出最新的文件或者提交更新。當(dāng)然,個人用戶使用的時候,就當(dāng)是獨享這個服務(wù)器了。因此,使用SVN先要搭建服務(wù)端。
群暉系統(tǒng)自帶SVN套件,搭建起來相對簡單。威聯(lián)通雖然沒有自帶,但是借助于Docker,我們依然可以輕松搭建起來SVN服務(wù)器。Docker鏡像使用這個garethflowers/svn-server。打開威聯(lián)通的Container Station,進(jìn)入鏡像文件頁面,點擊提取,先把鏡像拉下來。服務(wù)器那欄我選擇阿里云的,具體怎么設(shè)置在我以前的文章有提到過,請自行搜索。如果你的網(wǎng)絡(luò)還不錯,直接從官方服務(wù)器拉鏡像就可以了。鏡像名稱填寫garethflowers/svn-server,版本保持latest就好了。
稍等片刻,鏡像文件就下載好了,可以看到,鏡像大小只有13.72MB,可謂精簡至極,在NAS上運行也不會有太大壓力。
接著點擊加號創(chuàng)建Container,彈出頁面里設(shè)置容器的名稱,其他可以保持不變。
點擊高級設(shè)置,在網(wǎng)絡(luò)那一欄,端口轉(zhuǎn)發(fā)主機和容器都設(shè)置成3690,其他保持不變。
在共享文件夾那一欄,將NAS上的共享目錄映射到容器的/var/opt/snv目錄下,我設(shè)置的目錄為/Public/svn。
然后,其他就沒什么好設(shè)置的了,就配置了端口和共享文件夾,感覺超級簡單是不是。點擊創(chuàng)建,并確認(rèn)參數(shù),我們的SVN服務(wù)器就跑起來了。
雖然服務(wù)跑起來了,但是想要使用還需要再做點別的事情。SVN是以Repository(檔案庫)為單元管理文件的。用于團(tuán)隊協(xié)作辦公時,就可以為不同的小組或者不同的項目分別創(chuàng)建Repository,方便文檔的集中管理。管理個人文檔的話,當(dāng)然也需要先創(chuàng)建Repository。目前SVN服務(wù)器里并沒有創(chuàng)建任何Repository,所以我們這就創(chuàng)建一個。創(chuàng)建Repository需要在命令行下執(zhí)行一個簡單的命令,進(jìn)入控制臺確認(rèn)NAS的SSH是開啟的狀態(tài)。
然后使用SSH工具進(jìn)入NAS終端,我個人習(xí)慣使用Termius,其他常見的還有Putty、X-shell、SecureCRT、MobaXterm等,都可以選擇。進(jìn)入NAS終端后,執(zhí)行下面的命令即可:
docker exec -it svn-server svnadmin create new-repo
這條命令的意義就是進(jìn)入容器終端,然后執(zhí)行svnadmin 命令創(chuàng)建一個新的Repository。svn-server就是上面創(chuàng)建的容器的名稱,svnadmin create后面跟的就是新Repository的名稱,可以自行設(shè)置。
執(zhí)行完上面的命令后,就可以看到NAS相應(yīng)的映射目錄文件夾下就生成了一個名為new-repo的目錄,里面有一些數(shù)據(jù)文件和配置文件。
Repository生成后,還需要為使用這個Repository的用戶配置權(quán)限,主要涉及conf目錄下svnserve.conf、passwd、authz三個文件的修改。其中svnserve.conf文件的修改如下圖所示,修改的含義分別為:匿名用戶不可讀寫,授權(quán)用戶可寫,密碼文件路徑設(shè)置為passwd文件,訪問控制文件設(shè)置為passwd文件。其他內(nèi)容可以不修改。
在passwd中添加用戶并設(shè)置密碼,自己用就設(shè)置一個用戶就好了,等號前是用戶名,等號后是密碼。
最后通過authz配置對Repository的訪問權(quán)限??梢酝ㄟ^設(shè)置groups包含多個用戶,然后配置剛才創(chuàng)建的new-repo的權(quán)限,在下面的示例中,我將admin用戶和user2用戶組設(shè)置為可讀寫,user1用戶組設(shè)置為只讀。
完成上面的步驟,SVN服務(wù)端就算搭建完畢了。主要涉及三個步驟:SVN容器的創(chuàng)建,Repository的創(chuàng)建,Repository的配置,都不是很難的操作,出錯的概率也不大。
創(chuàng)建好了SVN服務(wù)端,要想使用的話,我們還需要一個SVN客戶端。在Windows平臺,SVN客戶端最好的選擇幾乎只有一個——TortoiseSVN,俗稱小烏龜。下載地址在這里:tortoisesvn。
TortoiseSVN的安裝過程沒什么好說的,無腦下一步即可。安裝完成后重啟一下電腦。
在你的電腦硬盤上隨便選擇一處目錄,點擊右鍵,就可以看到TortoiseSVN的各種操作交互都集成到右鍵菜單里面了。
選擇SVN Checkout,將服務(wù)器的倉庫拉到本地。倉庫地址為svn://NAS-IP/倉庫名,我的NAS IP為192.168.123.195,剛才創(chuàng)建的倉庫名為new-repo,因此地址欄就填寫svn://192.168.123.195/new-repo。設(shè)置完畢后點擊OK就可以了。
如果上一個章節(jié)中你的配置沒什么問題,點擊OK后應(yīng)該會彈出授權(quán)登錄窗口。根據(jù)自己的配置,輸入用戶名和密碼??吹较旅娴奶崾?,就說明倉庫Checkout成功了。
可以看到,這個Checkout下來的目錄圖標(biāo)上有一個綠色的對號,說明當(dāng)前本地的內(nèi)容和服務(wù)器保持一致。
接下來,我們就可以將我們需要管理的文檔放入這個目錄中。新加入的文檔,通過在文件上右鍵點擊TortoiseSVN-→Add加入,然后可以看到當(dāng)前文檔的圖標(biāo)變成了加號。
再右鍵點擊SVN Commit將文件上傳到服務(wù)器,填寫一下Message方便記錄每次修改。上傳成功后可以看到文件的圖標(biāo)也變成了綠色的對號。
當(dāng)我們對這個文件進(jìn)行修改的時候,可以看到文件又變成了紅色嘆號,表明這個文件和服務(wù)器版本有差異。如果想把當(dāng)前這個修改狀態(tài)同步到服務(wù)器,就可以右鍵點擊這個文件,選擇SVN Commit,和上面一樣,填入Message方便記錄每次修改,上傳成功后文件的圖標(biāo)又變成了綠色的對號。
就這樣,隨著你的文件不斷的修改,你可以隨時把某個修改狀態(tài)同步到服務(wù)器中。當(dāng)然SVN的強大可不止這一些,通過右鍵菜單集成的功能,你可以對比本地修改和服務(wù)器最新版本之間,或者兩個不同提交版本之間的差異。當(dāng)然并不是所有文件格式都支持差異對比,好在我們常用的word文檔是支持的。
你還可以隨時查看你的修改記錄,并回退到之前任何一個版本上,也可以隨時更新到最新的修改版本。
總之,SVN作為一個老牌版本控制系統(tǒng),面對文檔的管理,無論是個人還是團(tuán)隊,都可以輕松勝任。上面也只是介紹了TortoiseSVN的最基本的幾個使用操作,其功能可不止這些,本文受限于篇幅沒法一一介紹,還需要大家自行摸索。
搭建這個SVN服務(wù)器我用的是威聯(lián)通TVS-951N。這是一款九盤位的NAS,其中五個3.5寸硬盤盤位,四個2.5寸硬盤盤位。TVS-951N的CPU為Intel Celeron 3865U處理器,采用Kaby Lake架構(gòu),具備兩個核心,主頻為1.8GHz。內(nèi)置了Intel HD 610 顯示芯片,標(biāo)配了4GB內(nèi)存。
接口方面,TVS-951N具備一個千兆網(wǎng)口,一個5GBASE-T網(wǎng)口,一個USB3.0接口、兩個USB2.0接口,以及一個HDMI接口。5GBASE-T網(wǎng)口可以輕松讓你的內(nèi)網(wǎng)傳輸速度達(dá)到機械硬盤上限。HDMI接口的存在,也使得這款NAS具備了視頻輸出的能力。
TVS-951N CPU的性能不算是很強,但是用在NAS這種場合也還算可以勝任。想折騰的話建議配上8GB內(nèi)存。這款NAS最大的亮點應(yīng)該就是盤位多,以及支持5GBASE-T網(wǎng)口了。四個2.5寸硬盤盤位可以裝上幾塊固態(tài)硬盤,配合QNAP QTS的Qtier技術(shù),可以在存儲容量和讀寫速度上得到很好的平衡。如果對內(nèi)網(wǎng)傳輸速度有著更高要求,對存儲容量有更大需求,TVS-951N是個很不錯的選擇。最近威聯(lián)通陸續(xù)發(fā)布了幾款搭載全新硬件的NAS新品,TVS-951N作為一款老機型,價格幾乎已經(jīng)探底了,可謂性價比十足。
最后再回到版本控制系統(tǒng)。除了SVN,其實大部分人對GIT更熟悉一些,此外還有收費的版本控制系統(tǒng)Perforce。GIT常用于代碼的管理,GitHub、GitLab這些網(wǎng)站,以及各大公司內(nèi)網(wǎng)搭建的Gerrit,都是基于Git的版本控制系統(tǒng)。收費的Perforce估計很少有人聽說過,一般是大公司用來管理大規(guī)模代碼庫或者管理大文件的。SVN當(dāng)然也可以用來管理代碼,我畢業(yè)后第一家公司就是用SVN管理代碼的,但是,我覺得SVN用來管理文檔更合適一些。
本文介紹了如何再威聯(lián)通NAS上搭建和配置SVN服務(wù)器,也簡單說明了TortoiseSVN的基本使用方法。我讀研階段,實驗室就搭建了SVN服務(wù)器,用來管理同學(xué)們的文檔和代碼。有了SVN幫我們進(jìn)行版本控制,我們在修改文檔時,就可以更加專注于內(nèi)容輸出,而不用擔(dān)心文件命名混亂,不用擔(dān)心文件丟失,還可以隨時查看修改,隨時進(jìn)行版本還原。我們需要做的,只是記得定時提交修改就可以了。如果你也有一臺NA,不妨試試搭建個SVN服務(wù)器,我想一定會給你的學(xué)習(xí)工作帶來不少幫助。