Xcode-使用xCode自帶Git(管理、提交)程式碼

Xiaolou發表於2017-12-14

在應用程式開發過程中,很重要的一部分工作就是如何進行原始碼的版本控制。當程式碼出現問題時,我們就需要將程式碼恢復到原先正常的版本。如果是多個人共同開發一個專案,那麼程式碼的控制就會非常複雜。幸運的是,開發者不需要自己控制這些,因為有專門的軟體來負責,叫做版本控制系統。 版本控制系統,或者說修改控制系統,實際上是一種檢測原始檔的改變並將其儲存留作以後參考使用的機制(軟體)。此外,它還能記錄其他有用資訊,比如是哪個開發者修改了程式碼,何時修改的,修改了哪一部分,以及其他歷史資訊。版本控制系統可以比較不同版本程式碼的不同,有必要時能恢復整個專案到以前的版本,追蹤有害程式碼從而減少產品的錯誤。 通過版本控制系統,開發者可以在一個專案的不同分支上工作,當專案的各個部分開發完備時,將它們放到一起形成最終的版本,這個過程被稱為合併。事實上,這種做法再團隊和軟體公司中相當常見:每個人負責專案的一部分,最終所有部分被整合到一起形成最終產品。 對於個人開發者來說,版本控制系統並不是必需的,但是我們仍然強烈推薦開發者使用它,因為它可以使程式碼方便的在有錯誤的版本和可以工作的版本之間轉換。事實上,很多開發者從來不使用類似的工具,他們會在專案新增新的功能時手動儲存原先的專案。這其實是一個很不好的習慣,因為版本控制軟體可以更好更高效地完成這項任務。 Git是一個常見的版本控制系統,它最開始是由Liunx之父Linus Torvalds開發的,Git使用虛擬目錄,又稱為repositories,來管理一切事物。Git可以通過命令列呼叫,也有專門為它設計的桌面應用軟體。如果Git對你來說很陌生,我建議你在網上檢視一些它的相關資訊。關於Git更深層次的內容都不在本文的討論範圍之內。 從Xcode5開始引入了使用git的一些新特性。它將git的各項功能整合到一個選單中,並提供子選單來進行軟體合併的控制。在接下來的閱讀中你會發現,使用git來進行版本控制相當的簡單快捷。 我們接下來的任務就是學習如何在Xcode中使用git,以及Xcode是如何整合Git的各項功能。如果你覺得對這些很陌生,我建議你先上網搜尋一下相關的內容。在接下來的教程中,我會假定你已經瞭解了版本控制系統和git是什麼,並將注意力集中在Xcode如何管理它上。 GIT Demo概述(GIT Demo Overview) 與其他教程中的demo app不同,這次我們不會去實現一個應用來演示某一項iOS SDK特性,最終我們也不會產生一個示例產品。實際上,我們會新建一個demo工程,寫幾行程式碼,然後利用這個工程來演示Xcode提供的版本管理功能。換句話說,我們會集中注意裡於IDE上,而不是iOS本身。 我建議你跟著我一起一步一步實現這個例項專案,在相應的地方手動新增程式碼,不用擔心,程式碼量不是很多。跟著教程的步驟,我們將執行多種重複的版本控制相關的操作,並且我們必須實時看到結果。如果我只是提供了一個具備所有操作的的應用,那麼你無法體會到這些改變。 好了,廢話不多說了,讓我們仔細看看使用Xcode進行版本控制的要點吧。 建立一個Git源(Creating a Git repository)**** 每次在Xcode中建立新工程的時候,都會提示開發者是否將專案作為一個本地的git源。在建立工程的最後一步Xcode會有一個核取方塊,如果選擇了它,git源就會被新增到工程目錄中。通常這個選項會被忽視,或是被認為是Xcode的另外一個沒用的功能,尤其是從未用過git的開發者,或是程式設計新手。 開啟Xcode,建立一個新的工程。選擇iOS區的“Application”,在應用模板頁選擇“Single View Application”。

Xcode-使用xCode自帶Git(管理、提交)程式碼
選擇下一步,在專案名中輸入GitDemo,確保下面的Devices選單選擇iPhone,無需iPad或者universal app。
Xcode-使用xCode自帶Git(管理、提交)程式碼
點選下一步,也就是最後一個步驟,在這裡先選擇一個要保持工程的目錄,然後在視窗底部選上Create git repository on (My Mac ):
Xcode-使用xCode自帶Git(管理、提交)程式碼
預設情況下,這個選項是被選上的,如果你不想使用git,你可以取消它,但是我不建議這麼做。本教程中,你需要將它勾選上,然後點選建立按鈕。 建立完專案之後,開啟Finder,找到專案儲存的目錄,在目錄中,有一個.git的子目錄,時Xcode為儲存git源相關資料自動建立的。
Xcode-使用xCode自帶Git(管理、提交)程式碼
如果你看不到.git目錄,你需要讓隱藏的檔案可見。具體做法就是開啟一個Terminal視窗,輸入以下命令: 對於OS X Mavericks 10.9: defaults write com.apple.finder AppleShowAllFiles TRUE 對於以前的OS X版本, efaults write com.apple.Finder AppleShowAllFiles TRUE 為了重啟Finder應用,輸入 killall Finder 這就是本專案在本地git源儲存的位置。實際上,如果你選上了相應的選項,這個目錄就會被建立。相應地,在你建立新應用時,.git子目錄也會一同被建立。 顯然使用Xcode建立一個git源毫不費力,然而,如果你在專案建立時未建立git源,之後又想加上這個功能怎麼辦呢?好吧,其實你可以在任何時候為你的專案建立源,但是不是使用Xcode。儘管這種情況很少發生,我還是會告訴你該怎麼做。 如果你願意的話,你可以直接跳到本教程的下一部分。我建議你接著讀下去,因為接下來這些資訊還是很有用的。 在進行演示前,你需要首先通過Xcode下載Command Line Tools,因為我們要在Terminal下操作,並且需要一些額外的工具。如果你還沒有下載,那就去Xcode>Preferences…選單,選擇Download選項卡,展開Components區,點選Commond Line Tools右邊下載按鈕。下載完成後,一個對勾符號會取代下載按鈕。
Xcode-使用xCode自帶Git(管理、提交)程式碼
  現在,為這個例子再建立一個工程,完事後可以刪了它。在建立時取消那個建立git源的選項。這次我們不想讓Xcode為我們準備一個源。把這個工程命名為NoGitExample,儲存到桌面,然後你可以跟我接下來輸入的命令一樣。 一切準備妥當後,開啟Terminal視窗(如果你之前開啟了一個,那就先關掉它再重啟,從而使我們安裝的命令列工具生效)。下面切換到新專案的目錄: cd /Users/YOUR-USERNAME/Desktop/NoGitExample 別忘了在上邊命令中設定Mac的使用者名稱,接下來,輸入: git init  這會初始化一個空的源,如果你在Finder裡面檢視或是輸入ls命令,你會看到.git子目錄已經被建立,很好,接下來輸入: git add . 這樣,當前目錄所有的內容就被新增到源裡面去了,最後,輸入以下命令: git commit -m 'Initial commit' 接下來會出現一個本地git源所執行的改變列表,如下圖所示:
Xcode-使用xCode自帶Git(管理、提交)程式碼
現在git源就建好了,但是如果你回到Xcode,開啟Source Control選單,你會發現一切仍然是被禁用。
Xcode-使用xCode自帶Git(管理、提交)程式碼
這是因為當我們使用命令列工具建立git源時,Xcode並未被通知,下面點選Xcode>Quit Xcode,然後重新啟動它,在NoGitExample專案中,如果你再次開啟Source Control選單,你會發現所有的選項已經被使能了,就像一開始勾選上建立git源一樣。
Xcode-使用xCode自帶Git(管理、提交)程式碼
現在這個專案的使命已經結束,你可以在桌面上刪除它。 現在你知道如何為你所有的專案新增git源了,即使你在建立時沒有新增,你也可以在以後任何時候為它手動新增源。 **提交更改(Committing Changes)******提交更改指的是儲存一個包含所有更改的新版本。一般來說,當我們做了一些有意義的工作,並且專案處於某一個穩定狀態時,就可以提交一次更改。然而具體什麼時候提交更改並沒有硬性的規定。我的建議是:從上次提交更改之後,如果你怕花費大量時間和精力做的新工作被誤刪很難恢復,你就需要提交更改了。 預設情況下,Xcode在專案建立之初會提交一次更改,這是為了儲存專案初始狀態。這項工作會在後臺完成,不會打擾你或者要求你進行確認。如果你在專案建立時沒有新增git源,但是之後你手動新增了,你可以通過我們先前使用過的命令來進行提交:git commit -m ‘Initial commit’ 實際上,你如果去Source Control>History…選單,你就會看到初次提交更改的記錄,以後每次提交更改,都會在這裡有所記錄。
Xcode-使用xCode自帶Git(管理、提交)程式碼
接下來讓我們小幅修改一下我們的工程,在ViewController.m檔案中,新增以下屬性宣告: @interface ViewController ()   @property (nonatomic) int sum;   @end 接下來,像下面這樣修改viewDidLoad方法: 1 2 3 4 5 6 7 8 9 10 11 12

- (void)didReceiveMemoryWarning

{

[ super  didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

int a = 5;

int b = 10;

self.sum = a + b;

NSLog( "The result is: %d" , self.sum);

}

看一下Project navigator皮膚,你會發現在ViewController.m檔案旁邊,新增了一個M字母,像下面這樣:

Xcode-使用xCode自帶Git(管理、提交)程式碼
這意味著那個檔案已經被修改,相比上一次提交更改,檔案有所改變。一般來說,你每次改變檔案,都會出現這個M字母,提醒你有未提交的更改。 下面看看如何提交更改,其實非常簡單,只需要開啟Source Control>Commit選單,下面視窗就會出現:
Xcode-使用xCode自帶Git(管理、提交)程式碼
讓我們一步步看看它告訴我們了什麼。在左邊(標1的區域),列出了所有被更改的檔案,在這個例子中,只有ViewController.m這個檔案被改變,因此列表中只有它被顯示。如果你仔細觀察,你會發現檔案左邊有一個選擇框,預設情況下是被選中的,如果你取消它,這個檔案的更改就不會被提交。 在視窗的中間區域,有兩個預覽視窗,左邊那個是檔案當前版本,右邊是檔案上一次提交更改的版本。因為我們目前只是建立時提交過一次更改,因此右邊顯示的是檔案的初始狀態。 左邊視窗藍色區域標出的就是更改的內容,這樣的表示讓我們可以清楚地看出所有的修改。如果你仔細看,會發現在兩個視窗之間還有一個帶數字的小標籤,這個數字一一表示了各項更改。在數字旁邊,預設情況下有一個小對勾,表示本更改會被提交,如果你點選右邊的小箭頭,會彈出一個選項選單,你可以選擇不提交這個更改或是忽略它。
Xcode-使用xCode自帶Git(管理、提交)程式碼
  如果你選擇了Don’t Commit這個選項,小對勾就會被一個停止標誌取代,這項更改就不會被儲存到源中。
Xcode-使用xCode自帶Git(管理、提交)程式碼
如果你選擇了Discard Change這個選項,會彈出一個確認視窗,提示你所做的更改會被恢復,並且無法取消這個操作。
Xcode-使用xCode自帶Git(管理、提交)程式碼
如果你點選了OK按鈕,所選區域的改變就會消失,就像他們從未出現過一樣。 如果你仔細觀察上面這個提交視窗,你會看到你所做的所有修改都會被Xcode看做改變,即使是一個空行。實際上空行相當於回車,在螢幕上是不可見的,因此作為改變也是理所當然的。 在本例子中,你不用忽略任何修改,而是允許提交所有更改,因此所有的改變標籤旁邊必須都是小對勾。 在兩個視窗下面是一個空白的區域,中間顯示了提交更改的資訊。這個地方可以新增一些關於此次更改的簡短描述,點選它,加入如下內容:
Xcode-使用xCode自帶Git(管理、提交)程式碼
書寫有意義的提交資訊非常有用,尤其是當你頻繁提交的時候。因此,把它當做一個必要的步驟。 現在這個視窗的基本資訊看的差不多了,是時候做我們第一次的提交了。在這個視窗的右下腳,有一個按鈕上面寫著:Commit 1 file。
Xcode-使用xCode自帶Git(管理、提交)程式碼
這個按鈕會顯示需要提交的檔案總數。點選它之後你的第一次提交就完成了!開啟Source control > History,你會發現它會被顯示在列表中。
Xcode-使用xCode自帶Git(管理、提交)程式碼
從上圖中可以看出,我們編寫的資訊以及更改的檔案數量會被顯示出來。Xcode執行初始提交,所有檔案都會被提交一下,而這次只有我們修改的那個檔案被提交。 另外,關閉歷史視窗,看一下Project Navigator,你會發現ViewController.m旁邊的M符號已經消失了。 現在,讓我們準備下一次提交。這次,我們給工程新增一些新的檔案。新增檔案最好的方式就是建立個新類,因此,按下Command+N組合鍵,新增一個Objective-C類。讓這個類繼承NSObject類,取名叫TestClass,然後新增到工程中。 完成之後,注意一下Project Navigator,你會發現兩個新的類檔案旁邊有個A的字母標識,這意味著這些檔案已經被新增到專案中,當然,他們還沒有被提交。 開啟ViewController.h檔案,匯入我們的新類: #import "TestClass.h" 下一步,開啟ViewController.m檔案,像下面一樣宣告一個私有屬性: @interface ViewController ()   @property (nonatomic) int sum;   @property (nonatomic, strong) TestClass *testClass;   @end 看一下專案導航欄,這次有四個檔案有待提交。讓我們開啟Source Control > Commit選單,將它們提交。
Xcode-使用xCode自帶Git(管理、提交)程式碼
需要提交的一共有5個檔案。除了之前修改的四個之外,還有一個專案配置檔案。Xcode會在新類被新增到專案中之後自動修改這個檔案。如果你你開啟TestClass.h或TestClass.m檔案,左邊的視窗沒有任何顯示,如下圖所示。
Xcode-使用xCode自帶Git(管理、提交)程式碼
這是因為在這個檔案在之前沒有被提交的記錄,因此沒有一個可以比較的版本,在右邊只顯示了File was added。 在訊息區寫上這樣一個描述:TestClass was added to project.. 之後點選Commit 5 files按鈕即可。 這樣第二次手動提交就成功了。你可以到Source Control > History 選單檢視提交的記錄。
Xcode-使用xCode自帶Git(管理、提交)程式碼
**版本之間的比較(Comparing Versions)******當你提交了同一工程的不同版本之後,在他們之間比較,追蹤修改資訊就會非常方便。當新新增的程式碼不能執行時,這時與之間版本進行比較就非常重要了,你可以看出新版本相比上個穩定版有了哪些更改。 要比較同一個檔案的兩個版本,你可以使用View>Version Editor>Show version editor,或是點選工具欄上的Version Editor按鈕:
Xcode-使用xCode自帶Git(管理、提交)程式碼
點選之後,編輯器會分為兩欄。最初,兩欄會顯示相同的內容,點選編輯器下面的那個小時鐘圖示,可以選擇之前已經提交的版本進行比較。
Xcode-使用xCode自帶Git(管理、提交)程式碼
點選之後,兩個版本的區別會在編輯器中顯示出來。通常,左邊顯示的是當前版本的檔案,右邊顯示的是之前的版本。藍色高亮的區域顯示了被更改的程式碼,因此比較程式碼的變化非常容易。繼續選擇任何此前的版本,並觀察兩欄的區別。
Xcode-使用xCode自帶Git(管理、提交)程式碼
你可能會注意到,在兩個編輯器中間,還有在提交視窗看到的小標籤。點選向下的按鈕可以跳出讓你忽略更改的選項。如果你點選了忽略更改,Xcode會提示你是否同意。如果你同意忽略,這些被忽略的程式碼將會永遠消失,無法再找回來。所以要注意不要無意中忽略任何程式碼。 除了上面說到的方法,還有一種你回到之前版本的方法。如果你仔細觀察兩個編輯器下面的工具欄,在中間有個帶箭頭的時鐘圖示:
Xcode-使用xCode自帶Git(管理、提交)程式碼
點選它之後,兩個皮膚之間的縱列內容就發生了改變,變成了一系列表示之前更改的時間戳。注意並不是所有的都代表實際提交。代表先前版本的圓角矩形的數量取決於提交的次數。在這個例子中,只有兩個這樣的圖形,代表了兩次提交。 在這一列的下面,有兩個箭頭。左邊的那個屬於左邊的皮膚,右邊的箭頭屬於右邊的皮膚。將箭頭移動到任意之前的版本,你會看到在相應皮膚中的改變。如果你想比較當前版本和之前任意版本的區別,讓一個箭頭指向local行,然後移動第二個箭頭。時間戳從底部到頂部代表了從新到舊的程式碼。在base行,你會看到上一次提交的內容。繼續向上移動,你會看到最初的提交,如下圖所示:
Xcode-使用xCode自帶Git(管理、提交)程式碼
現在你知道如何比較版本之間的區別了。再繼續深入之前,把前面學習的練習一下玩玩吧。 **究竟是誰的錯?(Who’s Got the Blame)******除了比較檔案的版本外,Xcode還可以讓你追蹤檔案的提交者,以及是誰改變了哪一部分程式碼。在一個多人的團隊中,這非常有用。要使用這個功能,點選View > Version Editor > Show Blame View選單。或是講滑鼠放在工具欄的Version editor 按鈕上,選擇Blame選項。一個與上面類似的視窗將會出現:
Xcode-使用xCode自帶Git(管理、提交)程式碼
正如你看到的,當前檔案依據不同的提交被水平線分成幾段,每個程式碼段的作者,以及提交資訊和其他資訊顯示在視窗右邊的一個特殊皮膚中。 如果你還沒有做過,那自己動手開啟這個blame檢視,注意一下Xcode展現程式碼段作者的方式。在這個檢視中,可以方便地找到某一程式碼在何時被誰提交以及其他你想要的資訊。將滑鼠放在blame皮膚上,將會顯示修改的一些其他資訊。當指標停在提交段上時,一個帶圖片的小按鈕就會出現在它的右邊。點選選中該段程式碼,就會彈出一個附帶提交資訊視窗。在這個視窗中,你還可以跳轉到比較視窗(indication #1),以及特定提交的修改檔案(indication #2)。
Xcode-使用xCode自帶Git(管理、提交)程式碼
  除了比較檢視和blame試圖,其實還有一個日誌檢視(Log view)。你可以通過View > Version Editor > Show Log View來開啟它。或者如果你在這裡就不在詳細說它了。你可以自己去看看,畢竟這個用起來也沒那麼複雜。 **分支(Branches)******試想一下,你現在的工程有一個即將釋出的版本,或是已經發布的版本,你突然想新增一些新的特性,如何防止這些新新增的程式碼讓整個專案陷入癱瘓呢?答案很簡單:你需要使用分支。 如何簡單的理解分支呢?你可以把你的專案想象成一棵樹,穩定版本就是樹的主幹。任何新增新功能的版本都必須是樹幹的一部分。分支,就像是樹的枝幹,它從樹幹生長出來,向不同的方向生長。在git中,你可以通過建立分支來為你的程式碼設定一個新的路徑來實現新特性,而不用擔心在開發中破壞主幹。 實際上,在git中預設都會有一個分支,叫做master。Xcode自動執行的第一次提交中就發生在這個分支中。通常,單獨的開發者只在master這個分支開發,這其實不是一個好習慣。無論你是單打獨鬥還是組團合作,我認為在對專案作出重大改變或新增重大功能時,使用分支是十分重要的,它會為你避免很多麻煩。當然,在團隊專案中,為你自己負責部分的程式碼搞一個分支幾乎是必須的。 關於分支,你必須記住以下兩點: 提交到App Store或客戶的最終產品必須是專案中的master分支專案。

任何在第二分支中實現的程式碼或者功能最終都必須合併到master分支,這樣正式釋出的應用程式才是完整的。(以後再講這一點)

當你開始一個新分支時,你實際上是以當前工作狀態作為起點,即使你有任何未提交的更改。從這個時候起,所有的改變都會只體現在分支中。 現在讓我們回到Xcode,要建立一個分支,點選Source Control > GitDemo-master > New Brance…這個選單,然後會彈出如下選單:

Xcode-使用xCode自帶Git(管理、提交)程式碼
為這個分支起一個名字,我就把它起名為AnotherBranch好了。現在你怎麼給它起名其實都無所謂。點選OK按鈕,等一下新的分支就會被建立,而當前的程式碼也會複製到新分支中去。 開啟Source Control選單,你就可以輕鬆地找出活動分支是哪一個:它就在專案名字的旁邊。
Xcode-使用xCode自帶Git(管理、提交)程式碼
現在,讓我們做一次新的分支的提交。在這之前,讓我們新增一些新的程式碼。開啟類檔案,在私有屬性區新增以下方法宣告: @interface ViewController ()   ...-(void)sayHello;   @end 然後實現它: 1 2 3

-(void)sayHello{

NSLog( "Hello" );

}

最後,在viewDidLoad中呼叫它: 1 2 3 4 5 6

- (void)didReceiveMemoryWarning

{

...

[self sayHello];

}

現在,點選Source Control > Commit選單,版本比較視窗將會出現,你會看到只有一個被修改過的檔案--ViewController.m檔案,新新增的部分會被高亮顯示。 輸入下一個提交資訊:First commit to a new branch,然後點選commit 1 file按鈕。現在AnotherBrance分支的改變就會被提交了。 開啟Version Editor(menu View > Version Editor > Show Version Editor),找到右邊編輯皮膚下面的工具欄,你會看到被選中的分支是AnotherBranch,點選它,你會看到這個分支和master分支同時出現,從master分支中選擇任意版本,Xcode都會高亮顯示兩者之間的區別。通過這樣,你可以方便地跟蹤所有分支間程式碼的改變。

Xcode-使用xCode自帶Git(管理、提交)程式碼
最後,切換到另一個分支,或是master分支,你可以點選Source Control > GitDemo –AnotherBranch > Switch to Branch…選單。
Xcode-使用xCode自帶Git(管理、提交)程式碼
從這個視窗你可以選擇想要跳轉的分支,在這裡讓我們跳回master分支:
Xcode-使用xCode自帶Git(管理、提交)程式碼
選擇它並點選Switch按鈕,master分支就會成為當然活動分支。你會發現在AnotherBranch中做出的改變並沒有出現在master分支。很好,我們在管理工程推進的同時,卻沒有修改穩定版本。 **合併分支(Merging Branches)******在分支中進行開發是一種好習慣,然而,如果程式碼改變要體現在發行版中,那麼分支就必須被合併到master分支中。這一節我們將會告訴你怎樣合併它們。在Xcode裡,將兩個分支合併成一個非常簡單。 讓我們做一個小實驗來看看合併是怎樣工作的。首先,確保master分支是現在的活動分支。如果不是,趕緊改過來:Source Control > GitDemo – AnotherBranch > Switch To Branch… menu,並從展示視窗選擇master分支。 下一步,建立一個新的分支:Source Control > GitDemo – master > New Branch… menu,命名為LastBranch
Xcode-使用xCode自帶Git(管理、提交)程式碼
先讓Xcode飛一會,然後,到ViewController.m檔案中,再建立一個私有方法,首先宣告它: @interface ViewController ()   ...    -(void)sayByeBye;   @end 然後實現它: 1 2 3

-(void)sayByeBye{

NSLog( "Bye - Bye" );

}

最後,在ViewDidLoad方法中呼叫它: 1 2 3 4 5 6

- (void)viewDidLoad

{

...

[self sayByeBye];

}

在合併之前,先提交這些更改。使用Source Control > Commit選單來執行提交。 終於還是來到這一步,關於把兩個不同的分支合併成一個,你有兩種選擇: 從分支合併:與你選擇的分支相關的任何改變都會被合併到現在活動分支中。

合併到分支:當前活動分支的任何改變都會被合併到你選擇的分支中。

這兩種方式你都可以在Source Control > GitDemo 選單中找到。注意當你的活動分支是master分支時,第二個選項是不可選的。 假設一個開發者在Anotherbranch分支實現一個sayHello方法,另外一個開發者在LastBranch中建立實現了sayByeBye方法,現在你需要將兩個人的工作合併到下一個穩定版本中,想一想你需要怎麼做?很簡單,按以下方法將改變從兩個分支中合併進來: 首先,確保當前活躍分支是master分支。 然後,開啟Source Control > GitDemo – master > Merge From Branch…選單,選擇AnotherBranch然後點選Merge按鈕。

Xcode-使用xCode自帶Git(管理、提交)程式碼
接下來會出現一個比較視窗,在裡面你會看到合併之後程式碼的更改,看一眼,感覺差不多了就再點選Merge按鈕。
Xcode-使用xCode自帶Git(管理、提交)程式碼
Xcode會詢問你是否儲存專案的快照,點選Enable按鈕。讓Xcode飛一會,然後就好啦。AnotherBranch裡面新增的內容已經合併到master分支中。 使用同樣的方法來合併LastBranch。你會發現如果你不提交更改,Xcode不會讓你再次合併。於是,我們只好先提交一下。在比較視窗你會發現一個紅色的區域顯示合併之後的更改,而不是之前的藍色。這意味著分支中的程式碼將會替換原先活動分支中的程式碼。
Xcode-使用xCode自帶Git(管理、提交)程式碼
你可以輕鬆地避免這種現象的發生。在編輯皮膚的下面有幾個小按鈕,你可以試試他們都有什麼作用,我選了第一個,它的意思是master分支的程式碼會被放在上面,另一個分支的程式碼會跟在它後面。
Xcode-使用xCode自帶Git(管理、提交)程式碼
處理接下來所有需要更改的程式碼,不要有遺漏。完事後就點選Merge按鈕。 恭喜你!你已經成功的學會從多個分支合併了程式碼,類似的情形你也應該會了。 **忽略更改(Discarding Changes)******放棄不想要的程式碼更改功能非常有用,只需輕輕一點,自從上一次提交之後的更改都會被放棄。當你在開發過程中發現出了大亂子,你想從上一個穩定狀態重新開始時,這個功能就派上用場啦。注意放棄更改這個功能沒有回頭路,點完之後你就沒有辦法再撤銷這個操作,所以,要小心使用啊! 之前,當我們在討論版本比較時,我們學會了如何忽略某一部分更改的方法,下面,我們要學一下如何一下忽略自從上一次提交之後的所有更改。 為了測試這個功能,首先寫一些程式碼開啟ViewController.h ,新增一個公共方法宣告: 1 2 3 4 5

@interface ViewController : UIViewController

-(void)aVeryCoolMethod;

@end

現在,讓我們在ViewController.m中新增一個這個方法的實現,簡單點就行: 1 2 3

-(void)aVeryCoolMethod{

NSLog( "I'm feeling that you'll discard me... Really?" );

}

如果你注意到Project Navigator,我們剛剛更改的檔案旁邊有了一個M標識,很好,我們想看看如果忽略這些更改,這些檔案是否會回到更改之前的狀態。 這裡有一個重要的細節:你可以選擇忽略所有檔案的更改,也可以選擇忽略單個檔案的更改,這完全取決於你。如果你想忽略一個檔案的更改,首先選定這個檔案。在這個例子裡,如果你只選擇ViewController.m檔案然後開啟Source Control選單,你會在ViewController.m中發現Didcard Changes這個選項。類似的,如果你只選擇ViewController.h也是一個道理。然而,如果你想忽視這兩個檔案的更改(這裡假定有兩個以上的更改),就在Project Navigator中選中它們,然後再開啟Source Control選單。相應的位置就會顯示Discard Changes in 2 Files,像下面這樣:

Xcode-使用xCode自帶Git(管理、提交)程式碼
然而,這次我們不會使用這個按鈕,我們要用Discard All Changes。點選它之後,一個確定提示框就會出現,這是這部分Xcode防止你誤刪程式碼的唯一措施。
Xcode-使用xCode自帶Git(管理、提交)程式碼
點選Discard All Changes, 那你剛才寫的那個公共方法就永遠屬於過去了。看到了吧,只需幾步就可以讓你從當前工作狀態恢復到之前的提交,所以我再一次提醒你要在使用Source Control 中小心點,別誤點了這個按鈕。 總結****通過這篇教程,我盡力詳述了在Xcode中進行版本控制的方法。其實在幕後,真正起作用的是git----地球上應用最多的版本控制系統。你可能注意到我在教程中並沒有過多的提到GitHub或者任何Xcode的一些功能----其實我是故意這樣的。我想把注意力集中在使用Xcode進行git管理的內容上。只有當你懂得了如何進行版本控制之後,才能真正的使用GitHub。我想再重申一下,如果你是一個團隊在工作,使用版本控制工具是必須的!如果你是單打獨鬥,使用版本控制工具也是很有必要的,它可以為你花大量時間和精力所做的工作提供保障,並且在你新增新功能時可簡單地進行擴充套件。這個工具就像有些人說的那樣,一旦用了,就再也回不去了!最後,我希望這個教程會對你有用。

相關文章