讀古今文學網 > iOS編程基礎:Swift、Xcode和Cocoa入門指南 > 9.2 版本控制 >

9.2 版本控制

對於實際的應用,應該盡早將其納入版本控制下。版本控制是獲取項目週期性快照的一種方式。其目的是:

安全

版本控制可以幫助你將提交存儲到倉庫中,這樣代碼就不會因為計算機故障或其他原因丟失了。

協作

版本控制支持多人開發,讓大家合理地訪問相同的代碼。

放心

項目是個複雜的事物;有時需要做一些試驗性質的修改,這可能涉及很多文件,可能經過很多天,然後才能測試新的特性。借助版本控制,如果出問題了,我可以輕鬆追蹤每一步操作(之前的提交);這樣我就有信心做一些經過一段時間才能看到結果的試驗。此外,如果被一些試驗搞亂了,我可以通過版本控制系統列出最近做出的所有變更。如果出現了Bug,我可以通過版本控制系統查明何時出現的Bug並探查原因。

Xcode提供了各種版本控制設施,主要面向Git(http://git-scm.com)與Subversion(http://subversion.apache.org,也叫作svn)。但這並不表示你無法在項目中使用其他版本控制系統;這只意味著你無法在Xcode中以集成的方式使用其他版本控制系統。沒關係;還有很多其他方式可以使用版本控制,甚至是Git與Subversion。我們可以不使用Xcode的集成版本控制,轉而使用Terminal命令行,或使用專門的第三方GUI前端,比如,面向Subversion的svnX(http://www.lachoseinteractive.net/en/products),或面向Git的SourceTree(http://www.sourcetreeapp.com)。

如果不想使用Xcode的集成版本控制,那麼你可以將其關閉。如果未勾選Source Control首選項窗格中的Enable Source Control,那麼你只能從Source Control菜單中選擇Check Out,從遠程服務器獲取代碼。如果勾選了Enable Source Control,那麼還有3個復選框可以使用,它們決定了你想要哪一種自動行為。從個人角度來說,我喜歡勾選Enable Source Control與「Refresh local status automatically」,這樣Xcode會在項目導航器中顯示出文件的狀態;剩下的兩個復選框我沒有勾選,這是因為我喜歡自己控制。

在新建項目時,Save對話框中有一個復選框,可以在一開始就在項目目錄中創建一個Git倉庫。這個倉庫可以在自己的計算機上,也可以選擇遠程服務器。如果沒有特別的原因,建議勾選這個復選框!

當打開已有的項目時,如果項目已經由Subversion或Git管理,那麼Xcode會檢測到這一點,並且會立刻在界面上顯示出版本控制信息。如果使用的是遠程倉庫,那麼Xcode會自動在Accounts首選項窗格中輸入信息,這個窗格是倉庫管理的統一界面。要想使用遠程服務器,但又沒有工作副本,那麼請在Accounts首選項窗格中手工輸入信息。

可以在兩個地方使用源控制動作:Source Control菜單與項目導航器中的上下文菜單。要想檢出並打開存儲在遠程服務器上的項目,請選擇Source Control→Check Out。Source Control中的其他項都是顯而易見的,如Commit、Push、Pull(或Update)、Refresh Status及Discard Changes。值得注意的是Source Control菜單中的第一項,它會根據名字與分支列出所有打開的工作副本;可以通過其層次化菜單項進行基本的分支管理。

項目導航器中的文件會根據狀態進行標記。比如,如果使用Git,那麼可以區分出修改的文件(M)、新的未追蹤文件(?)以及添加到索引中的新文件(A)(如果沒有勾選「Refresh local status automatically」,那麼這些標記就都不會出現,除非選擇了Source Control→Refresh Status)。

圖9-1:版本比較

如果選擇了Source Control→Commit,Xcode會彈出一個比較視圖,列出所有文件中出現的所有變更。每個變更都可以從此次提交中排除(或完全恢復),這樣就可以將相關的文件分組到有意義的提交中。選擇Source Control→History也會彈出一個類似的比較視圖(不過Xcode並未提供類似於Git自己的gitk工具這樣的可視化分支展示工具)。合併衝突也可以通過一個圖形化的比較界面來完成。

還可以通過版本編輯器在任何時刻查看當前正在編輯的文件的比較視圖;方式是選擇View→Version Editor→Show Version Editor或單擊項目窗口工具欄中第3個Editor按鈕。版本編輯器實際上有3種模式:比較視圖、Blame視圖與日誌視圖(從View→Version Editor選擇,或使用工具欄第3個Editor按鈕的彈出菜單)。

比如,在圖9-1中,我可以看到在該文件的最新版本(位於左側)中對supportedInter-faceOrientations實現所做的修改(因為Swift語言發生了變化)。如果選擇了Editor→Copy Source Changes,那麼相應的diff文本(一個補丁文件)就會被放到剪貼板中。如果切換到Blame視圖,我就可以在編輯器中看到當前文件的所有提交版本。

還有一種方式可以查看某一行代碼是如何修改的,方式是選中該行(在正常的編輯器中),然後選擇Editor→Show Blame For Line。這時會彈出一個窗口,描述了將這行文本修改為當前內容時的提交信息;可以通過彈出窗口中的按鈕切換至Blame視圖或比較視圖。