WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
Gallery:使用Subversion
Subversion是什么?[ ]
Subversion是一個修正控制系統(tǒng)—使我們在進行代碼操作時可以對操作歷史進行追蹤。我們可以使用它來回顧任何時候所作的修改,并知曉曾做過什么,何時做的以及進行此操作的原因。修正控制系統(tǒng)是軟件開發(fā)中不可或缺的一部分。
如何獲取最新的代碼?[ ]
為了能夠進行這些指導操作,你需要在Unix系統(tǒng)上的一個shell帳戶。如果你使用的是Windows,你應當先參考一下我們的Windows上Subversion的相關指導。如果你使用Eclipse作為IDE的話,你需要參讀一下Eclipse中的Subversion。Mac OS X的用戶應當參看此頁內(nèi)容以加深對Subversion的了解,同時請參看一下我們的Mac上Subversion的相關指導。
我們的subversion庫被分為幾個區(qū)域。每個區(qū)都圍繞項目計劃中的某個特定的產(chǎn)品或概念?,F(xiàn)有區(qū)域如下:
名稱 | 描述 |
---|---|
gallery | Gallery 1.x |
gallery2 | Gallery 2.x,Gallery次世代 |
gallery_remote | Gallery Remote的java客戶端 |
整合 | 用以將G2同其他應用程序 整合在一起的模塊 |
docs | Gallery 1.x的documentation模塊 |
打包 | Gallery 1.x與Gallery 2.x發(fā)布的腳本 |
一旦你選擇好了,就可以通過一個svn checkout獲得一個復本。如果你想得到最新的Gallery2代碼:
svn checkout https://gallery.svn.sourceforge.net/svnroot/gallery/trunk/gallery2
注意,這里的URL使用的是HTTPS協(xié)議而不是HTTP。你可將此例中的"gallery2"替換為上表中的區(qū)域名稱。但請注意checkout無法覆蓋已有文件(自non-svn安裝)。 更多有關Gallery1的Subversion信息請參看Gallery1:Developer_Guide.
<toggle title="Information about "Secure connections truncated" errors"> 如果你使用正確的URL host部分(新)而非過期的(舊)話,那么自2006年10月26日之后,此來自svn命令的錯誤就不應再出現(xiàn)了:
新:svn checkout https://gallery.svn.sourceforge.net/svnroot/gallery/trunk/.... 舊: svn checkout https://svn.sourceforge.net/svnroot/gallery/trunk/....
參見Subversion proxying的相關問題來看看Sourceforge方面的解釋及解決方案(非常感謝SF的工作?。?。
如果你仍使用過期的/舊的URL復本的話,那么請按照SourceForge SVN documentation中給出的指導進行操作。 </toggle>
如何在web瀏覽器中查看代碼?[ ]
想查看一下代碼的修正歷史嗎? http://gallery.svn.sourceforge.net/viewvc/gallery/
如何更新代碼?[ ]
如果你剛做了一個"checkout"的話,那么情況就都已確定了。但如果過了一段時間你希望獲取最新代碼的話,那么你可以打開代碼所在的文件夾并輸入:
svn update
來保持代碼的更新。
你會看到類似這樣的回復
U index.php U main.php U embed.php ...
這將帶給你最新版本的代碼。你所接收的每份文件都會附帶一個字母,告知你Subversion該如何進行處理。這些字母在此有詳細的解釋。大部分情況下,文件將會被標記一個字母U,表示它們已進行更新了。如果你對文件進行了修改,而你所作的修改與我們所作的修改有沖突的話,就會看到文件被標記上了字母C。
如果出現(xiàn)了沖突該怎么辦?[ ]
當你所作的代碼修改與Gallery團隊所作的修改發(fā)生沖突時,Subversion無法自主解決問題。在這種情況下,Subversion用字母C標記這些有沖突的文件,而且得靠你自己來解決問題。Subversion book當中有關如何解決沖突的部分十分有用。這里給出一個簡短的例子。如果你和我們同時修改了index.php你就會得到這樣的鏈接:
C index.php
如果進行查看的話,就會看到類似這樣的文件:
ls -al index* index.php index.php.mine index.php.r1 index.php.r2
實際的數(shù)字(r1,r2)可能會不同。較小的數(shù)字表示的是存儲庫中較老版本的文件,較大的數(shù)字則代表較新版本的文件。.mine文件是Subversion試圖合并之前的你的文件,而index.php則包含Subversion進行合并的最佳嘗試。你會在index.php文件中看到:
<<<<<<< .mine /* 你所作的某修改 */ ======= /* Gallery所作的某修改*/ >>>>>>> .r2
有必要在了解你自己所作修改的同時也了解一下Gallery所作的修改,然后確定如何能夠讓二者并行不悖。合并操作的難度完全取決于你所作修改的程度。
一旦你完成了文件的合并,就可以通過:
svn resolved index.php
問題解決了。
這看起來著實有些麻煩,但并無妨害。Subversion將替你完成所有簡單的合并操作—僅僅給你留下了困難的。如果你對代碼所作的修改不是很大的話,那根本就不會發(fā)生什么沖突。
可以為我的Gallery使用Subversion嗎?[ ]
當然可以!而且這是個不錯的主意。這讓你的代碼升級變的既快又簡單了,而且你對代碼所作的任何修改都將在升級時被保留下來。如果你希望能有一個穩(wěn)定點的Gallery,我們建議你跟蹤主要發(fā)行版本的分支。這將保證在你升級更新時,僅最小且必要的修正將用于主要發(fā)行版本問題的解決(如安全性更新或致命BUG的修復)。
何為主要發(fā)行版本分支?[ ]
Subversion有一個被稱為分支(branch)的特點。這些都是獨立平行的代碼復本,它們是各行其道的。每次我們發(fā)布一個主要版本時(如2.0和2.2),我們都會為它創(chuàng)建一個分支(比如BRANCH_2_0和BRANCH_2_2)。這樣你就可以讓Subversion為你找到相應版本的代碼了。如果你希望從Subversion存儲庫中獲取Gallery2.2的話,就需要使用如下命令行:
svn checkout https://gallery.svn.sourceforge.net/svnroot/gallery/branches/BRANCH_2_2/gallery2/ .
這將為你找出最新的Gallery2.2代碼復本。這跟你下載Gallery2開發(fā)者整合包的效果幾乎是一樣的。
如何保證一個分支的更新?[ ]
只要我們新發(fā)布一個較小版本時(比如2.1.1),我們都會更新其在主要發(fā)布版本分支中的代碼。因此當我們發(fā)布2.1.1時,2.1和2.1.1版本的所有區(qū)別都在BRANCH_2_1中。這意味著,如果你選擇的是BRANCH_2_1,你所需要做的只是一個"svn更新",然后就能更新到2.1.1版本了。此方法的效率可見一斑。在小的更新版本中,我們正嘗試做較小的, API兼容性的修改。這樣你在一個分支版本中就能夠一直進行安全的升級了。這種情況下,你不會得到任何實驗代碼。
如何轉換為下個主要發(fā)布版本分支?[ ]
假設你選擇BRANCH_2_0安裝的2.0并且做了一些較小的修改?,F(xiàn)在你希望升級到2.1.1版本的最新代碼。你可以告知Subversion轉換為BRANCH_2_1,方法如下:
cd gallery svn switch https://gallery.svn.sourceforge.net/svnroot/gallery/branches/BRANCH_2_1/gallery2
現(xiàn)在你就有了2.1版本的代碼了,而且仍保留了你在2.0代碼中做出的修改。此命令發(fā)出的回復與svn更新時的回復很相似。請參考有關更新的描述部分來看看如何閱讀結果。
如果降低SVN checkout的磁盤空間占有率?[ ]
下載并解壓SvnSlim.zip,將 svnSlim 置入路徑下的一個目錄中。參見腳本頂部的指導。svnSlim創(chuàng)建一個gallery2的checkout,它省略了單元測試和語言文件(使用-L {locale}可選地包含一個語言)。checkout完成后,你可以運行svnSlim slim來移除subversion維護的所有文件的第二份復本。此方法將節(jié)省很多磁盤空間,但同時你就不能使用某些svn命令了(如svn diff),除非你使用svnSlim fat恢復這些文件。要更新一個svnSlim checkout的話,運行svnSlim update。無論是"slim"或"fat"都會運行。
如何由CVS遷移到Subversion?[ ]
基本的打算是將你gallery的CVS版本指定一個已知點,接著將其轉移到Subversion中相符的點上。完成此操作不會丟失你對代碼所作的任何修改。以下給出的指導是假設你的代碼位于gallery2目錄下的情況,請根據(jù)實際情況區(qū)別對待。
在sourceforge上更新至最新版本的CVS:
cvs -t -d :pserver:anonymous@gallery.cvs.sourceforge.net:/cvsroot/gallery update
請注意你應當提供新的-d標志,因為SourceForge在2006年5月12日換了一組新的CVS服務器(由于硬件故障)并且修改了CVS的路徑。
接著講你的代碼移除
mv gallery2 gallery2-cvs
然后從subversion截取相符的代碼。由CVS的頭部部分移動到Subversion主干部分:
svn checkout -r 13519 https://gallery.svn.sourceforge.net/svnroot/gallery/trunk/gallery2
或者如果你從一個分支(如BRANCH_2_1)進行移動操作的話,你應當這樣:
svn checkout -r 13519 https://gallery.svn.sourceforge.net/svnroot/gallery/branches/BRANCH_2_1/gallery2
接著復制你所作的修改到subversion中。此命令將全盤復制你的cvs實體到subversion實體中去,不過除了CVS dir(因為這些已經(jīng)不需要了):
cd gallery2-cvs tar --exclude CVS -cf - . | ( cd ../gallery2 && tar -xvf - )
現(xiàn)在你就可以在瀏覽器中瀏覽你的gallery2目錄了,而且該怎樣運行的還是照舊那么運行。然而,SVN和CVS在處理關鍵詞方面有微妙的差別,因此要做適當修正的話你應當按如下的方法操作。但是請注意此方法僅在HEAD->trunk的情況下測試過 .. 因此如果對于分支來說的話,情況可能會有所偏差。以下的命令修復存在于所有文件中的$RCSfile$關鍵詞,然后會放棄對部分無法修復文件的修改。
cd gallery2 perl -pi -e 's/(\$RCSfile):.*?\$/$1\$/' `find . -name "*.php" -print -o -name "*.inc" -print -o -name "*.class" -print -o -name "*.js" -print` install/config.php-template themes/ajaxian/theme.css lib/tools/creator/*.tpl lib/tools/uml/JavaClasses.xsl svn revert modules/core/test/phpunit/AdminRepository* modules/picasa/classes/*ss modules/picasa/test/phpunit/*ss
現(xiàn)在通過如下操作你就能看到所作修改的列表:
svn status
你的Gallery應該能正常運行了。要將你跟蹤的語句中的代碼更新的話,你應當:
svn update
如何由non-svn轉為svn?[ ]
開發(fā)者信息[ ]
編輯你的 ~/.subversion/config文件并將如下語句行合并到[auto-props]部分。如此這般,在添加新文件時,svn屬性將會被合理地設定。
[auto-props] *.php = svn:keywords=Author Id Revision;svn:eol-style=native *.inc = svn:keywords=Author Id Revision;svn:eol-style=native *.class = svn:keywords=Author Id Revision;svn:eol-style=native *.tpl = svn:keywords=Author Id Revision;svn:eol-style=native *.html = svn:keywords=Author Id Revision;svn:eol-style=native *.css = svn:keywords=Author Id Revision;svn:eol-style=native *.js = svn:keywords=Author Id Revision;svn:eol-style=native *.txt = svn:eol-style=native *.xml = svn:eol-style=native MANIFEST = svn:keywords=Author Id Revision;svn:eol-style=native GNUmakefile = svn:keywords=Author Id Revision;svn:eol-style=native strings.raw = svn:keywords=Author Id Revision;svn:eol-style=native *.po = svn:keywords=Author Id Revision;svn:eol-style=native *.mo = svn:mime-type=application/octet-stream *.gif = svn:mime-type=image/gif *.png = svn:mime-type=image/png *.jpg = svn:mime-type=image/jpeg
注:Gallery不會使用上述設定中的"日期(Date)"關鍵詞,因為根據(jù)區(qū)域設置的不同,輸出也會不一樣,從而可能會導致svn安裝中文件完整性檢查時出問題。
最后,如果你希望啟用auto-props的話,請記得將[miscellany]部分中的enable-auto-props設置為是(yes)
對于Windows用戶,每個用戶的config文件一般都能在如下路徑中找到:
C:\Documents and Settings\<YOUR_LOGIN>\Application Data\Subversion\config
對于其他語言版本的Windows例子,如果是德語語言的用戶,路徑就是:
C:\Dokumente und Einstellungen\<YOUR_LOGIN>\Anwendungsdaten\Subversion\config
%APPDATA% 是對應你的"Application Data"目錄的環(huán)境變量。將如下語句復制到任何Explorer窗口的地址欄中,最終將會直接打開上述例子中的文件夾,而無需在意Windows所使用的語言。
%APPDATA%\Subversion\config
如果你使用的是Windows,Eclipse和Subclipse Plugin以及JavaHL系結(可能還包括JavaSVN系結,不過我沒有進行過親測)的話,用此方法查找config文件也是可以的。