2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

Subversion 簡介

 ekylin 2006-08-07

Subversion 簡介

三千年版本控制

developerWorks
文檔選項(xiàng)
將此頁作為電子郵件發(fā)送

將此頁作為電子郵件發(fā)送


最新推薦

Java 應(yīng)用開發(fā)源動(dòng)力 - 下載免費(fèi)軟件,快速啟動(dòng)開發(fā)


級(jí)別: 中級(jí)

Elliotte Harold (elharo@metalab.unc.edu), 副教授, Polytechnic University

2006 年 7 月 06 日

Elliotte Rusty Harold 介紹了 Subversion —— 一種開放源碼、多用戶版本控制系統(tǒng),支持非 ASCII 文本和二進(jìn)制數(shù)據(jù)。通過 Elliotte 的介紹,您可看到如何在 Eclipse 中配置 Subversion 支持(通過 Subclipse 插件)、檢出一個(gè)項(xiàng)目、與您的存儲(chǔ)庫同步,隨后執(zhí)行一些常用的操作,如合并、修補(bǔ)、比較和刪除。

版本控制之于程序員,就好比安全網(wǎng)之于高空秋千表演者。知道安全網(wǎng)就在那里,萬一自己摔落它能夠提供保護(hù),高空秋千表演者才能放心大膽地在空中飛躍。同樣,版本控制使您有能力去冒以往想都不敢想的風(fēng)險(xiǎn)。如果哪兒出了錯(cuò),您總是可以使自己的代碼回復(fù)到一個(gè)已知的、工作正常的版本。您可以在不觸及主干的分支中進(jìn)行試驗(yàn),而不會(huì)影響到其他小組成員。在已經(jīng)發(fā)布的產(chǎn)品的較老版本中發(fā)現(xiàn) bug 時(shí),您可以輕松檢出特定版本,以確認(rèn)、修訂,并生成該 bug 的修補(bǔ)程序。如果沒有版本控制,您必須極為慎之又慎,緩慢地推進(jìn),總而言之,生產(chǎn)力會(huì)更低。

Subversion 是一種開放源碼的全新版本控制系統(tǒng),支持可在本地訪問或通過網(wǎng)絡(luò)訪問的數(shù)據(jù)庫和文件系統(tǒng)存儲(chǔ)庫。不但提供了常見的比較、修補(bǔ)、標(biāo)記、提交、回復(fù)和分支功能性,Subversion 還增加了追蹤移動(dòng)和刪除的能力。此外,它支持非 ASCII 文本和二進(jìn)制數(shù)據(jù),所有這一切都使 Subversion 不僅對(duì)傳統(tǒng)的編程任務(wù)非常有用,同時(shí)也適于 Web 開發(fā)、圖書創(chuàng)作和其他在傳統(tǒng)方式下未采納版本控制功能的領(lǐng)域。

本文介紹了使用 Subversion 追蹤項(xiàng)目的基礎(chǔ)知識(shí),以使您在編寫代碼時(shí)能夠承受更多的風(fēng)險(xiǎn)、享受更多的樂趣。

版本控制簡史

當(dāng)我還是一名剛剛畢業(yè)的學(xué)生時(shí),我第一次在國家太陽觀察站(National SSolar Observatory)接觸到了如今版本控制系統(tǒng)的鼻祖 —— SCCS。今天,已經(jīng)出現(xiàn)了數(shù)不勝數(shù)的版本控制系統(tǒng),而 SCCS 也早已被更強(qiáng)大的產(chǎn)品所取代,如 Visual SourceSafe、BitKeeper、Perforce 和開源 CVS(參見 參考資料 部分)。

在開放源碼程序員間,CVS 已成為一種事實(shí)上的 標(biāo)準(zhǔn)。Codehaus、Sourceforge、Savannah 和 Java™ 社區(qū)的 java.net 等站點(diǎn)中駐留的免費(fèi) CVS 使得為開源項(xiàng)目建設(shè)存儲(chǔ)庫更為簡單。以 CVS 為中心,已發(fā)展起一個(gè)大型的附件市場,包括 TortoiseCVS、ViewCVS 和 Fisheye 等工具。

與其他版本控制系統(tǒng)相比,CVS 最令人稱道的地方就是其非鎖定 存儲(chǔ)庫,這使多個(gè)開發(fā)人員能夠同時(shí)檢出同一個(gè)文件。CVS 在提交時(shí)解決沖突問題,這就避免了沖突成為發(fā)展的瓶頸。CVS 第二個(gè)出色的特性就是它是一種網(wǎng)絡(luò)存儲(chǔ)庫。處于許多不同系統(tǒng)上的程序員可以通過公共的 Internet 訪問相同的存儲(chǔ)庫。

逐漸失去優(yōu)勢的 CVS

CVS 在過去的十年中,為社區(qū)提供了優(yōu)質(zhì)的服務(wù),但它陳舊的劣勢開始體現(xiàn)出來。首先,它實(shí)際上僅能處理 ASCII 文件。Unicode 文件會(huì)令 CVS 嚴(yán)重混亂。此外,CVS 存儲(chǔ)庫更改起來極為困難。CVS 沒有任何關(guān)于 “移動(dòng)” 操作的概念。它只能注意到,一個(gè)文件在一處被刪除了,而在一個(gè)新位置創(chuàng)建了另外一個(gè)文件。由于它不會(huì)連接兩個(gè)操作,因此也很容易使文件歷史軌跡丟失。設(shè)置 CVS 存儲(chǔ)庫時(shí),您必須非常謹(jǐn)慎地為每個(gè)文件選擇準(zhǔn)確的位置,因?yàn)樵谠O(shè)置之后,您幾乎就要一直使用這個(gè)位置了。

CVS 已經(jīng)不再適合現(xiàn)代開發(fā),這一點(diǎn)越來越明顯。特別是 CVS 只能滿足老式 C 程序員的 ASCII 需求,而對(duì) Web 開發(fā)人員和其他非傳統(tǒng)用戶來說,CVS 實(shí)際上根本不起作用。在您開始考慮存儲(chǔ)整個(gè) Web 站點(diǎn)時(shí),在 CVS 中,將文件從一個(gè)目錄移動(dòng)到另外一個(gè)目錄是關(guān)鍵考慮事項(xiàng)。因此,在幾年前,許多核心 CVS 開發(fā)人員認(rèn)為,已經(jīng)到了利用他們多年來使用 CVS 時(shí)學(xué)到的經(jīng)驗(yàn)和教訓(xùn)、從頭開始創(chuàng)建新一代開放源碼存儲(chǔ)庫的時(shí)機(jī)。在 2004 年年初,他們的努力結(jié)出了豐碩的果實(shí),那就是 Subversion 1.0。

Subversion 的支持與采納

程序員(特別是那些依賴版本控制的程序員)是一個(gè)非常謹(jǐn)慎的群體,Subversion 著實(shí)用了很長一段時(shí)間,才得到他們的廣泛接受。很少有程序員愿意沖在易于流血的最前沿,即便是他們已經(jīng)因?yàn)?CVS 受了傷。甚至是在 Subersion 變得可靠之后,仍然用了好幾年的時(shí)間,所有第三方編輯器、IDE 和文檔規(guī)范才相繼跟進(jìn)。而 Subversion 依然在不斷改進(jìn),BBEdit 和 Eclipse 等第三方工具現(xiàn)在已經(jīng)有了足夠好的 Subversion 支持。逐漸地,新項(xiàng)目也紛紛選擇 Subversion 滿足其版本控制需求,而老項(xiàng)目正在向 Subversion 移植。最近,Apache Software Foundation 已移植到 Subversion。已實(shí)現(xiàn)移植的項(xiàng)目包括 Xerces XML 解析器、Apache HTTP Server 和 Spamassassin。





回頁首


通過 IDE 使用 Subversion

您可通過命令行使用 Subversion,但若將其與您的 IDE 集成更為便捷。IntelliJ IDEA 5.0 及后續(xù)版本均包含對(duì) Subversion 的內(nèi)置支持。NetBeans 還不支持 Subversion,但相關(guān)工作已經(jīng)在開展,未來版本中將提供支持。對(duì)于 Eclipse,您需要安裝 Subclipse 插件。本文使用 Eclipse 作為 IDE。

Subclipse 的安裝與其他 Eclipse 插件類似:

  1. 在 Eclipse 中,選擇 Help Software Updates | Find and Install...。

  2. 在向?qū)У牡谝粋€(gè)面板中,單擊 Search for new features to install 單選按鈕,并單擊 Next。

  3. 在向?qū)У牡诙€(gè)面板中,單擊 New Remote Site。輸入 Subclipse 作為名稱,輸入 http://subclipse./update_1.0.x 作為 URL。然后單擊 Finish。

    這將啟動(dòng)另外一個(gè)小的向?qū)?。下一個(gè)對(duì)話框應(yīng)為您提供一個(gè)可安裝的特性 —— Subclipse。選中它并單擊 Next。

  4. 接受許可協(xié)議,完成安裝。

程序包目前未經(jīng)過數(shù)字簽名,但只要您是按照第三步的 URL 下載的,就是安全的。

Subversion 快捷方式

如果您目前常常使用 Subversion,您可能希望將其添加到 Eclipse 的 New、Open Perspective 和 Show View 菜單中。為此,選擇 Window/Customize Perspective... 并在 Shortcut 分類列表中選中 SVN。這將使您可在目前可看到 CVS 的所有菜單中訪問 Subversion。

安裝程序包后,您必須重新啟動(dòng) Eclipse,隨后才能使用 Subversion。完成之后,您就可以與如今使用 CVS 大體相同的方式使用 Subversion 了,只有為數(shù)不多的區(qū)別。

檢出項(xiàng)目

設(shè)置一個(gè)新的 Subversion 存儲(chǔ)庫,特別是網(wǎng)絡(luò)存儲(chǔ)庫相對(duì)來說較為復(fù)雜。但若您正在連接一個(gè)現(xiàn)有項(xiàng)目,第一次檢出文件就相當(dāng)輕松。在 File 菜單中選擇 New/Other...。這些步驟將為您打開如 圖 1 所示的對(duì)話框:


圖 1. 通過 Subversion 啟動(dòng)一個(gè)新項(xiàng)目
通過 SVN 檢出項(xiàng)目

接下來,打開 SVN 文件夾,選擇 Select Checkout Projects from SVN,并單擊 Next 以顯示如圖 2 所示的對(duì)話框:


圖 2. Select/Create Location
Select/Create Location

第一次從存儲(chǔ)庫檢出時(shí),您需要選擇 Create a new repository location 并單擊 Next。這將為您打開如圖 3 所示的對(duì)話框:


圖 3. 為存儲(chǔ)庫鍵入 URL
為存儲(chǔ)庫鍵入 URL

您在這里提供存儲(chǔ)庫的 URL。這只是一個(gè)普通的 http URL,如 http://svn./repos/asf/xerces/java/。這一次單擊 Next 時(shí),Eclipse 連接到存儲(chǔ)庫,并查找可檢出的文件夾。通常有三個(gè)文件夾:branches、tags 和 trunk,如圖 4 所示。Branches 文件夾用于試驗(yàn)。Tags 通常標(biāo)識(shí)較老的、已發(fā)布的軟件版本。而大多數(shù)時(shí)候,您都希望在主分支上工作(CVS 稱之為 HEAD),因此選擇 trunk 并單擊 Next。


圖 4. 選擇要檢出的修訂版
選擇文件夾

您現(xiàn)在有兩個(gè)選擇:Check out as a Project configured using the New Project WizardCheck out as a project in the workspace,如圖 5 所示。您可按自己的需要任意選擇,您可能希望為項(xiàng)目命名,因?yàn)槟J(rèn)名稱為 “trunk”。最后,單擊 Finish。


圖 5. 檢出項(xiàng)目的兩種方法
檢出項(xiàng)目的兩種方法

Eclipse 現(xiàn)在從您選擇的分支、主干或標(biāo)記中下載所有源文件。如果您選擇的是 Check out as a project in the workspace,則必須完成 Eclipse 的 New Project 向?qū)?,以設(shè)置編譯器級(jí)別、項(xiàng)目布局和其他選項(xiàng)。如果您未使用 New Project 向?qū)В瑒t需要手動(dòng)設(shè)置構(gòu)建路徑和其他選項(xiàng),就像您在自己的文件系統(tǒng)的一個(gè)目錄中創(chuàng)建了一個(gè)項(xiàng)目那樣。確實(shí),您所做的與那極為相似。所有文件都是本地存儲(chǔ)的。對(duì)于構(gòu)建、運(yùn)行和調(diào)試這樣的普通操作,Eclipse 不關(guān)心文件是否已為版本控制檢出。





回頁首


驗(yàn)證設(shè)置

此時(shí),最好進(jìn)行一次快速、明智的檢查,確保您已正確地設(shè)置了構(gòu)建路徑。如果沒有明顯的問題,并且能夠運(yùn)行單元測試,那么即可放心地繼續(xù)下去了。

如果存在問題,檢查項(xiàng)目屬性,以確保正確地設(shè)置了源路徑和類路徑。使之差一非常常見,無論是多一還是少一。因此,最終 Eclipse 會(huì)認(rèn)為您的類的名稱類似于 src.org.apache.xerces.parsers.SAXParserapache.xerces.parsers.SAXParser,而不是 org.apache.xerces.parsers.SAXParser。在多文件夾項(xiàng)目中,Eclilpse 也常常會(huì)錯(cuò)誤地將一個(gè)數(shù)據(jù)文件夾標(biāo)記為源文件夾或遺漏了一個(gè)源文件夾。如果發(fā)生了以上任何一種小故障,您都必須修復(fù)錯(cuò)誤,然后才能基礎(chǔ)。

多文件提交

Subversion 可在一個(gè)原子操作中提交數(shù)個(gè)文件(與之形成對(duì)比,CVS 將每一個(gè)分開的文件視為一次獨(dú)立提交)。為此,只需在 Package Explorer 中選擇您想提交的所有文件(按住 ctrl 鍵或 Command 鍵,然后依次單擊所需文件),然后在上下文菜單中選擇 Team/Commit... 即可。如果您隨后需要取消更改或?qū)⒋鎯?chǔ)庫回復(fù)到特定更改之前的狀態(tài),這種方法非常有用。

要檢查錯(cuò)誤,選擇 Project | Properties,然后找到 Java Build Path。您可在 source 選項(xiàng)卡中修訂任何向?qū)ё鲥e(cuò)的地方。您可能還要添加另外一個(gè)項(xiàng)目需要的 JAR 歸檔,Eclpse 在檢出時(shí)不會(huì)注意到此歸檔。您還可在 library 選項(xiàng)卡的 Java Build Path 中添加此歸檔。

請(qǐng)做好心理準(zhǔn)備,您可能要在這里花上一點(diǎn)時(shí)間。Eclipse 很少會(huì)在第一次就讓一切正確無誤,每個(gè)項(xiàng)目組織其文件和庫的方式又總會(huì)有所不同。

與存儲(chǔ)庫同步

接下來您就可以照常編輯文件了。作出您希望的任何更改。運(yùn)行單元測試。優(yōu)化代碼。更正注釋中的拼寫錯(cuò)誤。完成部分工作后,使用上下文菜單并選擇 Team/Commit...。您將看到圖 6 所示的對(duì)話框,要求您輸入提交注釋:


圖 6. Subclipse 的提交對(duì)話框
提交

同樣,若其他人更改了您希望應(yīng)用于您的副本的存儲(chǔ)庫,只要在 Package Explorer 中選中文件,并從上下文菜單中選擇 Team/Update 即可。這會(huì)以主副本替換您的副本。





回頁首


合并

如果您已進(jìn)行了更改,其他開發(fā)人員也進(jìn)行了更改,那么您就必須手動(dòng)合并文件。對(duì)于絕大多數(shù)簡單更改,Subversion 可推斷出需要進(jìn)行怎樣的處理,無需人工干預(yù)。但對(duì)于較大、較為復(fù)雜、存在沖突的更改,您可能需要參與進(jìn)來,手動(dòng)合并更改。

Subclipse 在這里可提供一些幫助,但實(shí)際上我發(fā)現(xiàn),在一個(gè)獨(dú)立的窗口或選項(xiàng)卡中直接實(shí)現(xiàn)一個(gè)臨時(shí)文件副本,通過存儲(chǔ)庫更新本地副本以覆蓋我的更改,然后通過臨時(shí)副本重新輸入更改,這樣做往往更容易。若存儲(chǔ)庫中的更改與我做出的更改相比較少,我就會(huì)從存儲(chǔ)庫實(shí)現(xiàn)臨時(shí)副本,并通過它進(jìn)行提交,而不是更新。隨后我會(huì)重新應(yīng)用那些更改。這聽上去非常復(fù)雜,但事實(shí)通常并非如此,它的發(fā)生幾率幾乎與您希望的一樣低。即便是您出了錯(cuò),忘記重新應(yīng)用更改或是錯(cuò)誤地應(yīng)用了更改,總是可以找到所有更改的完整歷史(包括您覆蓋的那些更改)供您參考。實(shí)際上您從未徹底丟失任何東西。

如果您不確定已更改了哪些文件,同步視圖可以為您顯示這些文件。您還可打開標(biāo)簽修飾(label decoration)來查看上次提交/更新后哪些文件發(fā)生過更改。選擇 Help | Preferences,然后再選擇 General/Appearance/Label Decorations。然后選中 SVN 復(fù)選框。(實(shí)際上該復(fù)選框在默認(rèn)情況下就是選中的。)





回頁首


修補(bǔ)

如果您不具備正在使用的存儲(chǔ)庫的提交權(quán)限,就需要制作一個(gè)修補(bǔ)程序,然后將其發(fā)送給維護(hù)人員。只要選中您希望比較的文件,然后從上下文菜單中選擇 Team/Create Patch... 即可。您可以隨自己的方便將修補(bǔ)程序保存到文件或剪貼板中。隨后可通過電子郵件將其發(fā)送給維護(hù)人員,或者在 bug 報(bào)告中附上該修補(bǔ)程序。修補(bǔ)程序本身采用的格式與 CVS 所使用的 diff 格式相同。

應(yīng)用他人發(fā)送給您的修補(bǔ)程序就沒那么復(fù)雜了,只要選中您想修補(bǔ)的文件或項(xiàng)目。從上下文菜單中選擇 Team/Apply Patch... ,然后平臺(tái)上慣用的 open file 對(duì)話框選擇修補(bǔ)程序文件即可。





回頁首


比較

如果您已作出了一些更改,并且希望看看您的副本與存儲(chǔ)庫中的版本有怎樣的差別,只需在上下文菜單中選擇 Compare/Latest From Repository 即可。這實(shí)際上與 CVS 中比較功能的工作方式完全相同。圖 7 顯示了比較功能的工作情況:


圖 7. 在 Subclipse 中比較兩個(gè)文件





回頁首


刪除

刪除文件也很輕松。只要在 Eclipse 的程序包管理器中刪除文件,然后提交父文件夾即可。刪除目錄要略微復(fù)雜一點(diǎn)。您可以選擇一個(gè)目錄并刪除它。目錄中的所有文件將會(huì)立即被刪除。但在您刪除后,目錄本身及其所有子目錄又會(huì)立即出現(xiàn)在原來的位置。要真正地刪除一個(gè)文件夾,您需要選中 “已刪除” 的文件夾并提交它。同一規(guī)則也適用于將一個(gè)文件從一個(gè)位置移動(dòng)到另外一個(gè)位置的情況。

小心!

Apache 項(xiàng)目將源代碼提交到了不屬于自己、現(xiàn)在也無法刪除的 Subversion 存儲(chǔ)庫中,使自己陷入麻煩。Apache 可以隱藏代碼,但如果您知道到哪兒去看,您會(huì)發(fā)現(xiàn)這些代碼就在那兒。擁有源代碼的人可能是惡意的,也有可能向 Apache 的 ISP 發(fā)送一條 DMCA 下線通知,從而使 Apache 脫離 Internet。Apache 惟一的防御措施就是徹底刪除其存儲(chǔ)庫。

在您刪除了一個(gè)文件或一個(gè)文件夾之后,依然可以通過存儲(chǔ)庫使其還原,即便是已經(jīng)提交了刪除。一旦您將任何內(nèi)容放進(jìn)存儲(chǔ)庫,那么就永遠(yuǎn)不會(huì)真正、永久地失去它,這有時(shí)候會(huì)產(chǎn)生問題。例如,假設(shè)您發(fā)現(xiàn)有人意外的檢入了其整個(gè)主目錄,包括其 Quicken 數(shù)據(jù)文件和所有來自其愛人的情書歸檔。您很希望能夠徹底消除 這些被誤提交的文件,這樣就不會(huì)有其他人得到這些文件。盡管這是一個(gè)非同尋常的操作(無論如何,版本控制系統(tǒng)的目的就在于永遠(yuǎn)地保留每一個(gè)文件的每個(gè)修訂版),但有時(shí)也是必要的。令人沮喪的是,Subversion 漏掉了這個(gè)重要的特性。

由于沒有徹底消除的命令,所以我在為外部可見的存儲(chǔ)庫使用 Subversion 時(shí)非常不安。CVS 也沒有這樣的命令,但在 CVS 中,您完全有可能在不毀掉存儲(chǔ)庫的情況下手動(dòng)刪除錯(cuò)誤提交的文件。





回頁首


結(jié)束語

對(duì)于內(nèi)部存儲(chǔ)庫,Subversion 提供了遠(yuǎn)超過 CVS 的改進(jìn)。如果添加了某種類型的徹底消除功能,它也應(yīng)同樣適于外部存儲(chǔ)庫。盡管像 Eclipse 這樣的工具對(duì) Subversion 的第三方支持還不像 CVS 支持那樣普遍,但形勢正在迅速地發(fā)生變化。Subversion 會(huì)成為新項(xiàng)目的默認(rèn)源代碼存儲(chǔ)庫。尚無源代碼控制的現(xiàn)有項(xiàng)目應(yīng)盡快檢入 Subversion。而已有 CVS 存儲(chǔ)庫的現(xiàn)有項(xiàng)目可能仍在觀望,希望等到他們所依賴的全部工具均全面支持 Subversion 后再進(jìn)行切換。但這些項(xiàng)目最終也會(huì)移植到 Subversion。Subversion 中的改進(jìn)如此顯著,令人難以忽略。未來必將屬于 Subversion。





回頁首


參考資料

學(xué)習(xí)

獲得產(chǎn)品和技術(shù)
  • Subversion:針對(duì)不同平臺(tái)的開放源碼及二進(jìn)制版本。

  • Subclipse:Eclipse Subversion 插件。

  • Teepee:NetBeans Subversion 項(xiàng)目。

  • TMate:IntelliJ IDEA Subversion 插件。


討論




回頁首


關(guān)于作者

Elliotte Rusty Harold 來自新奧爾良, 現(xiàn)在他還定期回老家喝一碗美味的秋葵湯。不過目前,他和妻子 Beth 定居在紐約臨近布魯克林的 Prospect Heights,同住的還有他的貓咪 Charm(取自夸克)和 Marjorie(取自他岳母的名字)。他是 Polytechnic 大學(xué)計(jì)算機(jī)科學(xué)系的一名副教授,講授 Java 和面向?qū)ο缶幊?。他?Cafe au Lait Web 站點(diǎn)已經(jīng)成為 Internet 上最流行的獨(dú)立 Java 站點(diǎn)之一,它的姊妹站點(diǎn) Cafe con Leche 是最流行的 XML 站點(diǎn)之一。他編寫的圖書包括 Effective XMLProcessing XML with Java、Java Network ProgrammingJava I/O。目前,他在從事處理 XML 的 XOM API、Jaxen XPath 引擎和 Jester 測試覆蓋工具的開發(fā)工作。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多