掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
公司最近準備分出一套人馬去客戶那里做駐場研發(fā),這就涉及到代碼庫的統(tǒng)一管理。鑒于VSS在互聯(lián)網(wǎng)上表現(xiàn)不好,而TFS配置又過于復雜,我們選擇了SVN??紤]到代碼的安全性及性能,我們決定在本地布署自己的SVN服務器,然后每個人安裝TortoiseSVN作為客戶端,并安裝AnkhSVN插件配合Visual Studio使用,安裝CruiseControl.NET進行自動化的每日構(gòu)建,安裝Redmine進行項目管理,安裝BugFree進行bug管理。

南票網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
1.VisualSVN,TortoiseSVN,AnkhSVN
我安裝的版本是:VisualSVN2.1.9,TortoiseSVN-1.6.16.21511,AnkhSvn-2.1.10129。他們的安裝過程都是傻瓜式的,無需多表,主要是安裝好后需要進行幾個位置的配置。
a).采用Http還是Https
這個選擇的優(yōu)缺點就不多表,其實是看具體的需要。
b).安全證書問題
安裝完成后,如果采用Https方式,默認訪問時會出現(xiàn)安全證書問題。這其實是因為默認使用的是“自簽名證書”。安全證書的原理,簡單來講就是采用兩個大素數(shù)A和B,用A加密的只能用B解密,用B加密的只能用A解密,此時稱A為密鑰,B為公鑰或者B為密鑰,A為公鑰。這是一種典型的不對稱加密。如果這對鑰匙的提供者是公認的認證機構(gòu)(如Verisign),那么各種主流瀏覽器就會認為它是安全的證書,反之就是非安全證書。顯然,所謂“自簽名證書”,就是指這個鑰匙的提供者就是自己,在瀏覽器看來這當然就是典型的非安全證書了,會在最開始的頁面顯示一個警告。要想去除這個警告,有兩種方法,***種當然就是把你的相關(guān)信息發(fā)給那些認證機構(gòu),讓他們幫你生成安全證書。不過這個方案是需要花點銀子滴。第二種方法就是手工把當前的“自簽名證書”加入到受信任列表里去。這種方法簡單易行,具體的方法與說明請自行g(shù)oogle或者參見本文結(jié)尾的參考文章。
c).使用“鎖定-編輯-解鎖”模型
這個其實也是仁者見仁,智者見智的問題。只是對于我們而言,這個模型更加適合我們。但是SVN默認是“拷貝-修改-合并”模型,那如何進行變更呢?這就用到了SVN的自定義屬性了。在SVN里是通過內(nèi)置的屬性“svn:needs-lock”實現(xiàn)“鎖定-編輯-解鎖”模型的。在這里只提一下具體操作,找到config文件,我的路徑是:C:UsersljzforeverAppDataRoamingSubversionconfig。然后把enable-auto-props = yes前面的#號與空格刪掉,然后在[auto-props]下面加一行* = svn:needs-lock=x。更加具體的操作與說明請自行g(shù)oogle或者參見本文結(jié)尾的參考文章。這樣,所有的文件在上傳到SVN上后就自動進入“鎖定-編輯-解鎖”模型了。
d).關(guān)于"steal lock"
這個選項的初衷是為了增強靈活性,當一個文件被其它人鎖定后,仍然可以用“偷”的方式將鎖強行拿過來。不過這也是引起代碼沖突的潛在原因之一,我們決定將其屏避掉。這里用到的技術(shù)就是hook script。hook script其實是一些腳本文件,在windows環(huán)境下就是一些bat腳本。每當svn做一些特定操作時,比如“鎖定”,“提交”時,就會到指定目錄下查找相關(guān)的hook script并執(zhí)行它,達到對相應命令的預處理。我們這里是需要在鎖定前檢查用戶在申請鎖定文件時是否勾選了"steal lock",如果勾選了,則中斷操作,提示用戶這個選項已被系統(tǒng)禁止。放置這個hook script的目錄是跟代碼庫路徑是相關(guān)的,我的目錄是:E:RepositoriesHWCHhooks。安裝后默認里面已經(jīng)有若干個模板,以tmpl為擴展名,比如pre-lock.tmpl就是鎖定前做的預操作,post-commit.tmpl就是提交后做的預操作。我們在里面新建一個文件:pre-lock.bat,然后在里面輸入以下內(nèi)容:
- @echo off
- REM [1] REPOS-PATH (the path to this repository)
- REM [2] PATH (the path in the repository about to be locked)
- REM [3] USER (the user creating the lock)
- REM [4] COMMENT (the comment of the lock)
- REM [5] STEAL-LOCK (1 if the user is trying to steal the lock, else 0)
- setlocal
- ::svn對代碼資源庫路徑與文件路徑里的右小括號敏感,需要對其轉(zhuǎn)義
- ::代碼資源庫路徑
- set repos=%1
- set "repos=%repos:)=^)%"
- ::當前文件路徑
- set repPath=%2
- set "repPath=%repPath:)=^)%"
- set userName=%3
- set isSteal=%5
- rem NO_STEALING
- ::如果沒有被鎖定,則直接跳走結(jié)束處理
- if /I '1'=='%isSteal%' goto NO_STEALING
- REM echo aaa >>d:\log.txt
- REM echo repos = %repos% >>d:\log.txt
- REM echo repPath = %repPath% >>d:\log.txt
- REM echo userName = %userName% >>d:\log.txt
- rem if the path has been locked, find the Owner.
- ::這里是處理重點
- ::通過svnlook lock %repos% %repPath%,命令獲取鎖信息,例如:
- :: UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
- :: Owner: ljz
- :: Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
- :: Expires:
- :: Comment (1 line):
- ::通過findstr /r /n ".",將所有行的前面加上行號,前返回所有行,例如:
- :: 1:UUID Token: opaquelocktoken:1707b1a0-8dd1-a94e-87d2-6569a115cd5c
- :: 2:Owner: ljz
- :: 3:Created: 2011-08-08 21:05:31 +0800 (周一, 08 八月 2011)
- :: 4:Expires:
- :: 5:Comment (1 line):
- ::通過tokens=1,2,3 delims=: ,以:號與空格作為分隔符,將上述每一行分隔,并將前三段分別裝入變量%%i,%%j,%%k
- ::通過if %%i == 2 set LockedName=%%k,把第二行分隔后的第三段裝入變量LockedName,在這里,就是ljz
- for /f "tokens=1,2,3 delims=: " %%i in ('svnlook lock %repos% %repPath% ^|findstr /r /n "."') do (
- if %%i == 2 set LockedName=%%k
- )
- rem If we get no result from svnlook, there's no lock, allow the lock to happen.
- ::如果沒有獲取到鎖定信息,則直接跳走結(jié)束處理
- if not defined LockedName goto OK_EXIT
- rem If the person locking matches the lock's owner, allow the lock to happen.
- rem But this one won't effect, the SVN don't care if the person matchs, they just don't allow relock.
- REM echo userName = %userName% >>d:\log.txt
- REM echo LockedName = %LockedName% >>d:\log.txt
- ::如果鎖定人與當前用戶同名,則直接跳走結(jié)束處理
- if /I '%LockedName%'=='%userName%' goto OK_EXIT
- rem Otherwise, we've got an owner mismatch, so return failure:
- :WRONG_PERSON
- echo the path has been locked by %LockedName%, Pls contact %LockedName% to unlock it.>&2
- goto ERROR_EXIT
- :NO_STEALING
- echo Stealing lock is not allowed at this server.>&2
- :ERROR_EXIT
- endlocal
- exit 1
- :OK_EXIT
- endlocal
- exit 0
2.CruiseControl.NET
我下載的版本是CruiseControl.NET-1.6.7981.1,安裝完成后,主要通過配置安裝目錄下的ccnet.config文件來達到自動化構(gòu)建。
a).配置文件
我的配置文件如下:
E:\project\SVNTest\artifactDir E:\project\SVNTest\workingDir http://localhost/ccnet/server/local/ViewServerReport.aspx Saturday Sunday Saturday Sunday http://localhost:88/svn/HWCH/SVNTest/ E:\project\SVNTest C:\Program Files\VisualSVN Server\bin\svn.exe ljz ljz E:\project\SVNTest\SVNTest.sln Debug
基本上照葫蘆畫瓢,就能把配置搞定。
b).服務器時間
我在測試cc.net從svn獲取代碼的時候,出現(xiàn)了一個這樣子的錯:failed:svn Check for modification。找了很久都沒有找到原因,后來無意中改系統(tǒng)時間的時候才發(fā)現(xiàn),原來我在測試triggers節(jié)點時,把系統(tǒng)時間改到昨天了,所以一定要記得,下一次獲取代碼的時間一定要晚于上一次獲取代碼的時間,不然cc.net就再也無法從svn獲取***的代碼了。
3.redmine
這是個著名的開源項目管理軟件,這個就不多講了,具體的請參看我之前的博文:項目管理軟件之易度1.5,禪道2.0,redmine1.2(附redmine1.2的安裝)
4.bugfree
這也是個著名的開源bug管理軟件,下載***的Wamp環(huán)境,我的是WampServer2.1e,解壓安裝,然后下載***的bugfree,我的是bugfree2.1.3,解壓后放在Wamp安裝目錄的www目錄下,然后在瀏覽器地址欄里輸入指定網(wǎng)址,按提示生成數(shù)據(jù)庫,稍等幾秒鐘后就可以開始使用了。更詳細的操作與說明請自行g(shù)oogle或者參見本文結(jié)尾的參考文章。
***,下載個花生殼, 將域名動態(tài)綁定下,全世界就都可以使用公司本部的代碼了~~~
參考的文章:
網(wǎng)站的安全證書有問題
將自簽名證書用于Web服務安全性
命令行 Subversion 入門
TortoiseSVN有沒有對資源的獨占簽出功能
AnkhSVN的自動加鎖
用Hook Script阻止空日志信息提交到Subversion
分享Visual SVN Hook Script——檢查提交時必須填寫大于N個字符的日志信息
Hook Script to disable Break Lock in Tortoise SVN
SVN hooks(鉤子)-禁止break lock及steal lock。(Windows dos-batch版)
bat set命令詳解
BAT 批處理腳本 教程
DOS命令大全:Findstr命令詳解
安裝 VisualSVN-Server 和 TortoiseSVN 和 AnkhSVN 體會

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流