劉軍華,尹 根
(湖南郵電職業(yè)技術(shù)學(xué)院,湖南長(zhǎng)沙410015)
軟件項(xiàng)目的開發(fā)通常是由多人協(xié)作分工完成的,在此過(guò)程中每個(gè)項(xiàng)目參與人都會(huì)創(chuàng)建大量的源代碼和文檔。如何在不使用SVN 服務(wù)端(VisualSVNServer)的情況下,對(duì)由多人共同編寫的源代碼和文檔進(jìn)行有效地管理和維護(hù)成了困擾開發(fā)者的一大難題。比如,在高職院校技能競(jìng)賽的移動(dòng)互聯(lián)網(wǎng)應(yīng)用軟件開發(fā)、Web 應(yīng)用軟件開發(fā)、物聯(lián)網(wǎng)技術(shù)應(yīng)用等多個(gè)賽項(xiàng)中,就會(huì)涉及到要將多個(gè)選手編寫的項(xiàng)目代碼快速整合到一起的工作,讓許多參賽選手感到有些棘手[1]。本文以TortoiseSVN 免費(fèi)開源的版本控制軟件為例,提出了在Android Studio 開發(fā)工具實(shí)現(xiàn)項(xiàng)目版本控制的參考方法。
SVN 是Subversion 的縮寫,是一個(gè)免費(fèi)開源的版本控制軟件[2]。TortoiseSVN 是SVN 版本控制軟件的一個(gè)開源客戶端,可以超越時(shí)間進(jìn)行文件和目錄管理。文件保存在中央版本庫(kù),版本庫(kù)就像一個(gè)文件服務(wù)器,除了能記住文件和目錄的每次修改,還可以通過(guò)檢查歷史知道數(shù)據(jù)作了哪些修改以及是誰(shuí)做的修改,且將文件恢復(fù)到過(guò)去的版本,因此也被稱為“時(shí)間機(jī)器”[3]。
版本庫(kù)(Repository):也稱代碼庫(kù),存儲(chǔ)庫(kù),中央版本庫(kù),是源代碼統(tǒng)一存放的地方。它采用分層“文件——目錄”文件樹形式來(lái)存儲(chǔ)數(shù)據(jù),版本庫(kù)中存儲(chǔ)了項(xiàng)目的所有數(shù)據(jù),如項(xiàng)目源代碼和文檔等。每一個(gè)項(xiàng)目都是版本庫(kù)的子目錄,庫(kù)中記錄了每個(gè)用戶的每一次修改。連接到版本庫(kù)的用戶都能讀寫這些數(shù)據(jù),都能從版本庫(kù)中提取項(xiàng)目或提交項(xiàng)目到版本庫(kù)中去[4]。
工作拷貝(Working copy):也稱工作副本。與中央版本庫(kù)相對(duì)應(yīng)的,它是開發(fā)者在本地機(jī)器上的一個(gè)文件目錄,里面存放著從版本庫(kù)中獲得的源代碼和文檔的一個(gè)副本,開發(fā)者可以在本地查看、修改、編譯、運(yùn)行和調(diào)試,完成后再把新版本的源代碼和文檔提交到中央版本庫(kù)。
提?。–heckout):也稱簽出。從版本庫(kù)中獲得要修改的文檔或源代碼等文件的過(guò)程稱為提取。
提交(Commit):也稱簽入。將已經(jīng)修改好的文檔或源代碼等文件存入到版本庫(kù)中的過(guò)程稱為提交。
更新(Update):也稱同步。將版本庫(kù)中的最新版本下載到本地,以確保本地的工作副本與版本庫(kù)中的源代碼保持一致。一般在提交之前建議先更新,否則其它用戶上傳的新版本在你沒(méi)有更新的情況下就會(huì)被覆蓋,導(dǎo)致數(shù)據(jù)丟失。
使用TortoiseSVN 客戶端軟件在服務(wù)器上建立一個(gè)版本庫(kù),版本庫(kù)里可以存放許多不同項(xiàng)目的源代碼和文檔資源,由版本庫(kù)管理員根據(jù)項(xiàng)目的配置管理計(jì)劃,為項(xiàng)目成員分配相應(yīng)的訪問(wèn)權(quán)限以及對(duì)這些資源進(jìn)行統(tǒng)一管理,每個(gè)版本庫(kù)有一個(gè)唯一的URL 標(biāo)識(shí),項(xiàng)目成員通過(guò)URL 訪問(wèn)版本庫(kù)中的資源[5]。其工作原理如圖1 所示。用戶在使用版本庫(kù)之前,首先要把版本庫(kù)里的項(xiàng)目文件提取到本地,也可稱為一個(gè)工作拷貝,然后在本地進(jìn)行必要的修改,最后再通過(guò)提交功能將數(shù)據(jù)存入到版本庫(kù)。由于版本庫(kù)是集中式管理,任何修改都在本地進(jìn)行,在修改未被提交到服務(wù)器前,服務(wù)器不會(huì)把當(dāng)次修改與其他人的數(shù)據(jù)合并,也不會(huì)把當(dāng)次修改展示給別人。因此,每次提交時(shí),TortoiseSVN 都會(huì)將提交項(xiàng)目資源的版本與原有版本進(jìn)行比較,如果有修改則記錄修改內(nèi)容,并更新版本號(hào),這樣就實(shí)現(xiàn)了歷史操作的記錄,項(xiàng)目成員可以從版本庫(kù)中提取以往的任一版本。
圖1 TortoiseSVN 工作原理圖
一般情況下,搭建SVN 環(huán)境需安裝SVN 服務(wù)端(VisualSVN-Server)和SVN 客戶端(TortoiseSVN)兩款軟件。但是如果項(xiàng)目組開發(fā)人員的電腦在同一個(gè)局域網(wǎng)中,只使用TortoiseSVN 客戶端也能搭建一個(gè)局域網(wǎng)服務(wù)器,以實(shí)現(xiàn)對(duì)項(xiàng)目代碼的統(tǒng)一管理。下面介紹在Window7 下TortoiseSVN 客戶端安裝與配置方法。
進(jìn)入到TortoiseSVN 官網(wǎng)下載TortoiseSVN 客戶端安裝文件。網(wǎng)站中提供了32 位和64 位安裝包以及中文語(yǔ)言補(bǔ)丁。下載完成后直接運(yùn)行安裝包,根據(jù)向?qū)崾景惭b即可。安裝過(guò)程中,在圖2 顯示的這步中要選擇“Will be installed on local hard drive”。只有安裝帶有command line 功能的TortoiseSVN 客戶端,才能在Android Studio 中使用。
圖2 TortoiseSVN 安裝向?qū)D
3.2.1 搭建倉(cāng)庫(kù)目錄
新建一個(gè)空白目錄Demo 做"倉(cāng)庫(kù)"(如E:Demo),在Demo 目錄中按下鼠標(biāo)右鍵,依次選擇"TortoiseSVN->Create Repository here"。會(huì)自動(dòng)生成對(duì)應(yīng)的文件,完成后,直接點(diǎn)擊OK 即可。如圖3 所示。
圖3 創(chuàng)建倉(cāng)庫(kù)目錄圖
其中:
*conf 目錄:倉(cāng)庫(kù)配置文件所在目錄(如倉(cāng)庫(kù)的用戶訪問(wèn)賬號(hào)、權(quán)限等)。
*db 目錄:所有版本控制的數(shù)據(jù)存放目錄。
*hooks 目錄:放置hook 腳本文件的目錄。
*locks 目錄:用來(lái)放置SVN 文件庫(kù)鎖定數(shù)據(jù)的目錄,用來(lái)追蹤存取文件庫(kù)的客戶端。
*format 文件:一個(gè)文本文件,里面只放了一個(gè)整數(shù),表示當(dāng)前文件庫(kù)配置的版本號(hào)。
3.2.2 配置服務(wù)器
以記事本的方式打開倉(cāng)庫(kù)目錄下的conf/svn serve.conf 文件,在[general]節(jié)點(diǎn)下,去掉以下四行文本前的#和空格。
anon-access=none //將read 改為none,設(shè)置未驗(yàn)證用戶無(wú)任何權(quán)限
auth-access=write //設(shè)置已驗(yàn)證用戶給予寫權(quán)限
password-db=passwd //將密碼數(shù)據(jù)存放到passwd 文件中
authz-db=authz //將權(quán)限設(shè)置存放到authz 文件
3.2.3 配置用戶
以記事本的方式打開倉(cāng)庫(kù)目錄下的conf/passwd文件,在[users]節(jié)點(diǎn)下,添加用戶名和密碼。如:
admin=admin //設(shè)置admin 用戶名的密碼為admin
user1=1234 //設(shè)置user1 用戶名的密碼為1234
3.2.4 配置組和權(quán)限
以記事本的方式打開倉(cāng)庫(kù)目錄下的conf/authz 文件,在[groups]節(jié)點(diǎn)下設(shè)置組名及其成員。如:
teacher=admin,user1 //設(shè)置teacher 組的成員包括admin 和user1。其中成員名必須是在passwd 文件已定義的用戶名,該項(xiàng)設(shè)置為可選項(xiàng)。
另外,還要添加對(duì)倉(cāng)庫(kù)目錄的訪問(wèn)權(quán)限。如:
[/] //表示倉(cāng)庫(kù)的根目錄
@teacher=rw //表示teacher 組的用戶對(duì)資源庫(kù)所有的資源擁有讀寫權(quán),其中組名必須是在[groups]節(jié)點(diǎn)下已定義的組名,使用時(shí)要在組名前面加上@符號(hào)。
*=rw //表示所有用戶都具有讀寫權(quán)限
3.2.5 啟動(dòng)服務(wù)
為了便于客戶端穩(wěn)定訪問(wèn)服務(wù)器,將SVN 服務(wù)配置成Windows 系統(tǒng)服務(wù)??梢酝ㄟ^(guò)如下命令創(chuàng)建。
sc create svnservice binpath="C:Program FilesTortoiseSVNinsvnserve.exe -- service -r E:Demo"http://創(chuàng)建一個(gè)名為svnservice 的SVN 服務(wù),svnservice 為服務(wù)名稱,E:Demo 為版本庫(kù)的路徑。
net start svnservice //啟動(dòng)svnservice 服務(wù)
若有刪除服務(wù),可以使用sc delete"svnservice"命令。為了操作方便,可以將上述創(chuàng)建和刪除命令分別寫入到兩個(gè)bat 文件中,雙擊bat 文件即可實(shí)現(xiàn)啟動(dòng)或刪除服務(wù)。
3.2.6 訪問(wèn)測(cè)試
在創(chuàng)建SVN 服務(wù)并啟動(dòng)后,就可以對(duì)倉(cāng)庫(kù)進(jìn)行訪問(wèn)瀏覽。在桌面或任意位置空白處右鍵,依次選擇“TortoiseSVN->Repo-browser”菜單。在彈出的URL對(duì)話框中輸入要訪問(wèn)的SVN 服務(wù)器地址,如:svn://192.168.0.101。輸入完成后,點(diǎn)擊“OK”按鈕,將彈出用戶驗(yàn)證對(duì)話框。輸入設(shè)置的用戶名和密碼后,如輸入在passwd 文件中設(shè)置的用戶名(admin)和密碼(admin),即可打開倉(cāng)庫(kù)瀏覽,至此,配置全部完成,可以進(jìn)行簽入或簽出操作了。
Android Studio(簡(jiǎn)稱為AS)是Google 公司2013年推出的一款A(yù)ndroid 集成開發(fā)工具,它支持SVN 和GIT 兩種版本控制方式,兩者都需要在AS 中進(jìn)行相應(yīng)的配置,才能與版本庫(kù)中進(jìn)行checkout、commit 等操作。
打開Android Studio 的Settings 配置面板,依次點(diǎn)擊“Version Control-->SubVersion”菜單項(xiàng),在Use command line client 選擇TortoiseSVN 安裝的路徑,一般默認(rèn)安裝路徑為“C:Program FilesTortoiseSVNinsvn.exe”。
將一個(gè)AS 項(xiàng)目導(dǎo)入到TortoiseSVN 版本庫(kù)有多種方法,既可以在項(xiàng)目所在文件夾上點(diǎn)擊右鍵,依次選擇“TortoiseSVN->import…”,又可以先用AS 打開項(xiàng)目后再直接導(dǎo)入或關(guān)聯(lián)導(dǎo)入。直接導(dǎo)入和關(guān)聯(lián)導(dǎo)入的最大區(qū)別在于直接導(dǎo)入的項(xiàng)目與SVN 服務(wù)器沒(méi)有建立起關(guān)聯(lián),直接將項(xiàng)目代碼提交到SVN 服務(wù)器,而關(guān)聯(lián)導(dǎo)入的項(xiàng)目則是先與SVN 服務(wù)器建立連接,然后再將項(xiàng)目代碼提交到SVN 服務(wù)器。另外,由于Android 項(xiàng)目中很多內(nèi)容是通過(guò)gradle 和build 工具構(gòu)建出的安裝程序,這些程序占用了很多空間,強(qiáng)烈建議不要將這些文件提交到SVN 服務(wù)器,這些需要忽略的文件主要包括.idea 文件夾、.gradle 文件夾、所有的build 文件夾、所有的.iml 文件以local.properties文件。下面以直接導(dǎo)入方法為例,介紹在AS 中導(dǎo)入項(xiàng)目到版本庫(kù)的操作方法。
打開AS 集成開發(fā)環(huán)境,依次點(diǎn)擊“VCS-->Import Into Version Control->Import into Subversion”菜單項(xiàng),將打開Import into Subversion 對(duì)話框,選擇要導(dǎo)入的版本庫(kù)路徑,然后單擊“Import”按鈕,即可選擇要導(dǎo)入項(xiàng)目所在的根目錄,完成導(dǎo)入,如圖4所示。由于直接導(dǎo)入不能很好地忽略指定的文件列表,可以在項(xiàng)目導(dǎo)入完成后,再在SVN 版本庫(kù)中刪除需要忽略的文件或文件夾。在AS 集成開發(fā)環(huán)境中,依次點(diǎn)擊“VCS -> Browse VCS Repository ->Browse Subversion Repository”菜單項(xiàng),可以直接瀏覽SVN 上的內(nèi)容。
圖4 AS 中導(dǎo)入項(xiàng)目到SVN 服務(wù)器示意圖
將一個(gè)TortoiseSVN 版本庫(kù)中的項(xiàng)目提取到本地有多種方法,既可以在桌面或任意文件夾的空白處點(diǎn)擊右鍵,然后點(diǎn)擊彈出菜單中“SVN Checkout”,又可以在AS 歡迎界面“Check out project from Version Control”選項(xiàng)下選擇“Subversion”或者在打開AS 集成開發(fā)環(huán)境后,再依次點(diǎn)擊“VCS->Checkout from Version Control->Subversion”。
從SVN 服務(wù)器中提取項(xiàng)目到本地后,該項(xiàng)目即與SVN 服務(wù)器保持連接,可實(shí)時(shí)從服務(wù)器下載文件,也可上傳文件到服務(wù)器。為了便于用戶快速區(qū)分文件是否與服務(wù)器同步,AS 集成開發(fā)環(huán)境中用不同顏色標(biāo)識(shí)文件和文件夾,其中綠色表示新文件但沒(méi)有提交,藍(lán)色表示該文件有修改但沒(méi)有提交,紅色表示該文件沒(méi)有加入版本控制VCS 中的新文件,褐色或灰色表示已忽略文件,黑色表示該文件與服務(wù)器同步。
在局域網(wǎng)中,僅用TortoiseSVN 客戶端軟件也能搭建一個(gè)本地服務(wù)器,以解決多人共同開發(fā)同一個(gè)Android Studio 軟件項(xiàng)目過(guò)程中出現(xiàn)的版本混亂、代碼整合難等問(wèn)題,實(shí)現(xiàn)對(duì)項(xiàng)目源代碼和文檔的集中式管理,提高軟件開發(fā)效率。
湖南郵電職業(yè)技術(shù)學(xué)院學(xué)報(bào)2020年2期