理解 XCode 中的 Git 版本控制

類別: IT

在應用程式開發過程中,一個相當顯著的部分是開發人員管理程式碼變更的方式。這些是必須包含的功能,儲存和處理工作程式碼版本在不同階段穩定階段的副本,並能夠恢復程式碼當存在缺陷或者產生問題的時候。更有甚者,當多個程式設計師工作在同一個專案時,跟蹤所有的變更是一個單向的路徑。幸運的是,開發人員不必去發明一種方法來做這些事情,有一個特別的軟體解決方案,叫做版本控制系統(Version Control Systems

版本控制系統或者叫做修訂控制系統,實際上是一種能夠一直監視程式碼檔案的變更並儲存他們為了將來引用的機制(軟體)。除了這些之外,版本控制系統也儲存了額外的必要資料,例如哪個開發人員做了變更,變更發生在什麼時候,實際上修訂了什麼,其他型別的歷史不僅僅是資料。而且,版本控制系統提供了比較程式碼不同版本的功能,如果需要的話,可以恢復特定檔案或者整個專案到以前的版本,並追查惡意的程式碼最終實現無缺陷產品。

git-source-code
 

使用版本控制系統,開發人員可以工作在專案的不同路徑上,通常叫做分支(branch),當他們的程式碼完成時,所有的程式碼將合併到一起以便構建應用程式的最終釋出版本。這個過程叫做合併程式碼(merging),它包含了版本控制系統的一個特殊特性。實際上,在開發團隊和軟體公司中程式碼的版本控制是一個強制性的工作,團隊中的每個人負責專案的一部分,最後所有的程式碼被集中到一起放置在一個地方。

對個人開發者來說使用版本控制系統不是必要的,但是仍然是強烈推薦的。一旦遇到嚴重的問題或者說以程式碼都亂套了的時候,使用版本控制系統將更容易追查缺陷或者恢復程式碼到穩定版本和程式碼的工作版本。事實上,許多的個人程式設計師,特別是新人,根本不使用版本控制系統,當他們增加新功能或者是修改程式碼的時候,通常手動複製專案的副本。這是一個非常不好的習慣,原始碼控制能更好並且更有效率的完成這些工作,同時提供了前面描述的額外功能。

作為最出名的版本控制系統之一,git由Linux建立者 Linus Torvalds開發。Git在虛擬目錄(倉庫)中組織一切,實際上,任何版本的跟蹤都可以適用於他們。它既可以通過命令列使用,也可以通過桌面應用程式。如果git對你來說很陌生,那麼我建議你在網路上閱讀一些關於git的文章,而進一步討論git超出了本教程的範圍。

自從Xcode的第五版本起,就整合了git的豐富功能,包括各種選項選單的按鈕和管理原始碼的子選單。正像你稍後看到的,使用版本控制git是非常容易和快速的,在你看完本教程之後,沒有理由不使用它。

總結而言之,你已經理解了我們的任務是學習怎樣在Xcode中使用版本控制git,這一切將通過了解Xcode提供的每個相關特性來完成。如果你不熟悉所有的東西,或者在我們開始之前你需要獲取更多的知識, 請在網路上搜尋相關資訊。我不得不說,在本教程中我假設你關於版本控制系統擁有最基本的知識,比如git是什麼,因此我們要把它視為理所當然的事情,而關注Xcode怎麼管理這一切。

Git示例演示

與其他教程的演示程式相反,本文中我們不會實現一個應用去展示iOS SDK的具體特性,也不會有一個最終的開發樣本。實際上我們所做的就是去建立一個示例專案,僅僅在幾個點上新增幾行程式碼,我們將使用它作為一個工具去測試Xcode提供的所有原始碼控制管理選項。換句話說,我們重點討論的是IDE,而不是iOS。

除此之外,這一次不會有可供下載的例程了。取而代之的是,我邀請你一起來一步步實現這個 demo,並且在需要寫程式碼的地方手動新增程式碼(別擔心,不會很多)。這樣跟下來是有必要的,因為我們將會重複進行多種與版本控制有關的操作,並且我們必須即時看到結果。如果我只是提供一個操作已經完成的例程,就不可能有這樣的效果了,因為這樣下來你自己的練習部分近乎於零。

那麼,讓我們開始吧!我們用 Xcode 來近距離地看一看版本控制系統的精華所在。

建立 Git 倉庫

每次在 Xcode 中建立新專案,都會讓開發者選擇是否要新增一個本地 git repository。新建一個 project 涉及分為3步的引導過程,其中在第3步也就是最後一步中,Xcode 提供了一個勾選框和相應的說明,如果勾選了,一個 git repository 就會新增到儲存 project 的目錄中。這個選項很容易被忽略,或者被當做一個 Xcode 的沒用特性,這種事經常發生,尤其是對於從來沒用過版本控制和 git 的開發者,或者新手程式設計師。

具體細節如下,啟動Xcode並建立一個新專案。首先,選擇“單檢視應用程式(Single View Application)”作為應用程式的模板,同時在iOS選項部分,選擇“應用程式(Application)”項。

點選“下一步(Next)”按鈕到第二步,設定“產品名(Product Name)”欄位為“GitDemo”,同時確保在“裝置(Devices)”下拉選單中選擇“iPhone”。在這裡不需要iPad或者普通應用。

再次點選下一步按鈕,進入最後一步。在此,首先選擇儲存專案的目錄。然後選中視窗的底部的單選框,並選中在“My Mac”上建立git倉庫。

預設情況下,這個勾選框總是被選中的,然後每個 project 都會建立一個 git repo。如果你的專案不想用 git 和版本控制,只需取消選中,但我不建議這樣做。總之,本教程中我們希望啟用git,因此確保你選中了勾選框。最後,點選 Create 按鈕。

等待 project 建立完成吧,然後開啟一個 finder 視窗,來到我們儲存 project 的目錄下。在這裡,找到 .git 子目錄,這是 Xcode 自動建立的目錄,用來儲存 git repository 相關的資料。

Version Control Xcode GIT Directory

如果你看不到 .git目錄,你必須把電腦上的隱藏檔案改為可見。首先,開啟Terminal(終端)視窗,然後輸入以下命令:

對於 OS X Mavericks 10.9:


defaults write com.apple.finder AppleShowAllFiles TRUE

對於此前的 OS X 版本:


defaults write com.apple.Finder AppleShowAllFiles TRUE

然後,只需重啟 Finder 應用,所以再輸入一條命令:


killall Finder

因此,如你所見,這個 app 的本地 git repository 實際就儲存在這裡。相應地,你建立的任何新應用都會隨之帶來一個 .git 子目錄,只要你保持相應的選項是勾選的。

顯然,用 Xcode 來為 project 新增 git repository 是不費吹灰之力的。然而,如果你在建立 project 時沒有新增 git repository,或者想要稍後再新增,怎麼辦呢?好訊息是,你隨時都可以為 project 新增 repository,但是不用 Xcode 了。儘管這樣的情況很少見,我還是來講解一下。

注意,如果你不想看的話,可以儘管跳過本教程的下一節。但我建議還是讀下去,因為緊接著再下一節的內容會非常重要。

在開始講之前,你首先需要在 Xcode 裡下載 Command Line Tools,因為我們接下來要用 Terminal ,需要一些工具。如果你已經下載了這個包,就進行下一步。如果沒有,要安裝 command line tools,點選Xcode裡的 Xcode > Preferences…選單,然後選擇 Downloads一項。在視窗的上部,Components 一欄下,點選 Command Line Tools右側畫著向下箭頭的按鈕。一旦下載結束,下載按鈕會變成對勾符號。

Version Control Command Line Tool

然後,為了這個例子再建立一個 Xcode project,我們一切完成之後再把它刪除。這一次確保要取消勾選 Create git repository 選項。在這個例子裡,我們不需要 Xcode 來為我們準備 repository 了。把這個專案命名為 NoGitExample,並且儲存在桌面上,這樣就能直接使用我接下來的提供的指令了。

一切就緒,開啟一個 Terminal 視窗(如果之前已經有開啟的視窗,確定要先關閉再重啟,這樣才能應用安裝 command line tools 時做出的改變)。首先,來到儲存新 project 的目錄下:


cd /Users/YOUR-USERNAME/Desktop/NoGitExample

別忘了把上面的指令改為你自己 Mac 的使用者名稱。接下來:


git init

這會初始化一個空的 repository。然後如果你開啟 Finder 或者在 terminal 輸入 ls指令,你會看到 .git子目錄已經建立出來了。太棒了。繼續往下:


git add .

用這個指令,當前目錄(點號[.])的所有內容都會新增到 repository 中。最後,提交全部(也就是持久儲存所做的更改):


git commit -m 'Initial commit'

Terminal 視窗中會出現提交到本地 git repository 的檔案列表。下圖就是我的terminal的樣子:

Version Control Terminal

理解 XCode 中的 Git 版本控制原文請看這裡