Git 的詳細使用


 

本文翻譯自Understanding Git Source Control in Xcode (譯者myShire)歡迎您加入咱們的翻譯小組。git

 

在應用程序開發過程當中,很重要的一部分工做就是如何進行源碼的版本控制。當代碼出現問題時,咱們就須要將代碼恢復到原先正常的版本。若是是多我的共 同開發一個項目,那麼代碼的控制就會很是複雜。幸運的是,開發者不須要本身控制這些,由於有專門的軟件來負責,叫作版本控制系統。編程


版本控制系統,或者說修改控制系統,其實是一種檢測源文件的改變並將其保存留做之後參考使用的機制(軟件)。此外,它還能記錄其餘有用信息,好比是哪一個 開發者修改了代碼,什麼時候修改的,修改了哪一部分,以及其餘歷史信息。版本控制系統能夠比較不一樣版本代碼的不一樣,有必要時能恢復整個項目到之前的版本,追蹤 有害代碼從而減小產品的錯誤。xcode

 

經過版本控制系統,開發者能夠在一個項目的不一樣分支上工做,當項目的各個部分開發完備時,將它們放到一塊兒造成最終的版本,這個過程被稱爲合併。事實上,這種作法再團隊和軟件公司中至關常見:每一個人負責項目的一部分,最終全部部分被整合到一塊兒造成最終產品。app

 

對於我的開發者來講,版本控制系統並非必需的,可是咱們仍然強烈推薦開發者使用它,由於它可使代碼方便的在有錯誤的版本和能夠工做的版本之間轉 換。事實上,不少開發者歷來不使用相似的工具,他們會在項目添加新的功能時手動保存原先的項目。這實際上是一個很很差的習慣,由於版本控制軟件能夠更好更高 效地完成這項任務。編輯器

 

Git是一個常見的版本控制系統,它最開始是由Liunx之父Linus Torvalds開發的,Git使用虛擬目錄,又稱爲repositories,來管理一切事物。Git能夠經過命令行調用,也有專門爲它設計的桌面應用 軟件。若是Git對你來講很陌生,我建議你在網上查看一些它的相關信息。關於Git更深層次的內容都不在本文的討論範圍以內。工具

 

從Xcode5開始引入了使用git的一些新特性。它將git的各項功能整合到一個菜單中,並提供子菜單來進行軟件合併的控制。在接下來的閱讀中你會發現,使用git來進行版本控制至關的簡單快捷。學習

 

咱們接下來的任務就是學習如何在Xcode中使用git,以及Xcode是如何整合Git的各項功能。若是你以爲對這些很陌生,我建議你先上網搜索 一下相關的內容。在接下來的教程中,我會假定你已經瞭解了版本控制系統和git是什麼,並將注意力集中在Xcode如何管理它上。測試


GIT Demo概述(GIT Demo Overview)ui

與其餘教程中的demo app不一樣,此次咱們不會去實現一個應用來演示某一項iOS SDK特性,最終咱們也不會產生一個示例產品。實際上,咱們會新建一個demo工程,寫幾行代碼,而後利用這個工程來演示Xcode提供的版本管理功能。 換句話說,咱們會集中注意裏於IDE上,而不是iOS自己。atom

 

我建議你跟着我一塊兒一步一步實現這個實例項目,在相應的地方手動添加代碼,不用擔憂,代碼量不是不少。跟着教程的步驟,咱們將執行多種重複的版本控制相關的操做,而且咱們必須實時看到結果。若是我只是提供了一個具有全部操做的的應用,那麼你沒法體會到這些改變。

 

好了,廢話很少說了,讓咱們仔細看看使用Xcode進行版本控制的要點吧。

 

建立一個Git源(Creating a Git repository)

每次在Xcode中建立新工程的時候,都會提示開發者是否將項目做爲一個本地的git源。在建立工程的最後一步Xcode會有一個複選框,若是選擇 了它,git源就會被添加到工程目錄中。一般這個選項會被忽視,或是被認爲是Xcode的另一個沒用的功能,尤爲是從未用過git的開發者,或是編程新 手。

 

打開Xcode,建立一個新的工程。選擇iOS區的「Application」,在應用模板頁選擇「Single View Application」。

選擇下一步,在項目名中輸入GitDemo,確保下面的Devices菜單選擇iPhone,無需iPad或者universal app。

點擊下一步,也就是最後一個步驟,在這裏先選擇一個要保持工程的目錄,而後在窗口底部選上Create git repository on (My Mac ):

默認狀況下,這個選項是被選上的,若是你不想使用git,你能夠取消它,可是我不建議這麼作。本教程中,你須要將它勾選上,而後點擊建立按鈕。

 

建立完項目以後,打開Finder,找到項目存儲的目錄,在目錄中,有一個.git的子目錄,時Xcode爲存儲git源相關數據自動建立的。

若是你看不到.git目錄,你須要讓隱藏的文件可見。具體作法就是打開一個Terminal窗口,輸入如下命令:


對於OS X Mavericks 10.9:

 
 
 
 
 
  1. defaults write com.apple.finder AppleShowAllFiles TRUE  

 

對於之前的OS X版本,

 
 
 
 
 
  1. efaults write com.apple.Finder AppleShowAllFiles TRUE   

 

爲了重啓Finder應用,輸入

 
 
 
 
 
  1. killall Finder  

 

這就是本項目在本地git源保存的位置。實際上,若是你選上了相應的選項,這個目錄就會被建立。相應地,在你建立新應用時,.git子目錄也會一同被建立。

 

顯然使用Xcode建立一個git源絕不費力,然而,若是你在項目建立時未建立git源,以後又想加上這個功能怎麼辦呢?好吧,其實你能夠在任什麼時候候爲你的項目建立源,可是不是使用Xcode。儘管這種狀況不多發生,我仍是會告訴你該怎麼作。

 

若是你願意的話,你能夠直接跳到本教程的下一部分。我建議你接着讀下去,由於接下來這些信息仍是頗有用的。

 

在進行演示前,你須要首先經過Xcode下載Command Line Tools,由於咱們要在Terminal下操做,而且須要一些額外的工具。若是你尚未下載,那就去Xcode>Preferences…菜單, 選擇Download選項卡,展開Components區,點擊Commond Line Tools右邊下載按鈕。下載完成後,一個對勾符號會取代下載按鈕。


 

如今,爲這個例子再建立一個工程,完過後能夠刪了它。在建立時取消那個建立git源的選項。此次咱們不想讓Xcode爲咱們準備一個源。把這個工程命名爲NoGitExample,保存到桌面,而後你能夠跟我接下來輸入的命令同樣。

 

一切準備穩當後,打開Terminal窗口(若是你以前打開了一個,那就先關掉它再重啓,從而使咱們安裝的命令行工具生效)。下面切換到新項目的目錄:

 
 
 
 
 
  1. cd /Users/YOUR-USERNAME/Desktop/NoGitExample  

別忘了在上邊命令中設置Mac的用戶名,接下來,輸入:

 
 
 
 
 
  1. git init  

 這會初始化一個空的源,若是你在Finder裏面查看或是輸入ls命令,你會看到.git子目錄已經被建立,很好,接下來輸入:

 
 
 
 
 
  1. git add .  

這樣,當前目錄全部的內容就被添加到源裏面去了,最後,輸入如下命令:

 
 
 
 
 
  1. git commit -m 'Initial commit'  

接下來會出現一個本地git源所執行的改變列表,以下圖所示:

如今git源就建好了,可是若是你回到Xcode,打開Source Control菜單,你會發現一切仍然是被禁用。

這是由於當咱們使用命令行工具建立git源時,Xcode並未被通知,下面點擊Xcode>Quit Xcode,而後從新啓動它,在NoGitExample項目中,若是你再次打開Source Control菜單,你會發現全部的選項已經被使能了,就像一開始勾選上建立git源同樣。

如今這個項目的使命已經結束,你能夠在桌面上刪除它。


如今你知道如何爲你全部的項目添加git源了,即便你在建立時沒有添加,你也能夠在之後任什麼時候候爲它手動添加源。

提交更改(Committing Changes)
提交更改指的是儲存一個包含全部更改的新版本。通常來講,當咱們作了一些有意義的工做,而且項目處於某一個穩定狀態時, 就能夠提交一次更改。然而具體何時提交更改並無硬性的規定。個人建議是:從上次提交更改以後,若是你怕花費大量時間和精力作的新工做被誤刪很難恢 復,你就須要提交更改了。

默認狀況下,Xcode在項目建立之初會提交一次更改,這是爲了保存項目初始狀態。這項工做會在後臺完成,不會打擾你或者要求你進行確認。若是你在項目建立時沒有添加git源,可是以後你手動添加了,你能夠經過咱們先前使用過的命令來進行提交:git commit -m ‘Initial commit’


實際上,你若是去Source Control>History…菜單,你就會看到初次提交更改的記錄,之後每次提交更改,都會在這裏有所記錄。

接下來讓咱們小幅修改一下咱們的工程,在ViewController.m文件中,添加如下屬性聲明:

 
 
 
 
 
  1. @interface ViewController ()  
  2.  
  3. @property (nonatomic) int sum;  
  4.  
  5. @end  

接下來,像下面這樣修改viewDidLoad方法:

 
 
 
 
 
  1. - (void)didReceiveMemoryWarning  
  2. {  
  3.     [super didReceiveMemoryWarning];  
  4.     // Dispose of any resources that can be recreated.  
  5.  
  6.     int a = 5;  
  7.     int b = 10;  
  8.  
  9.     self.sum = a + b;  
  10.  
  11.     NSLog("The result is: %d", self.sum);  
  12. }  

看一下Project navigator面板,你會發如今ViewController.m文件旁邊,添加了一個M字母,像下面這樣:

這意味着那個文件已經被修改,相比上一次提交更改,文件有所改變。通常來講,你每次改變文件,都會出現這個M字母,提醒你有未提交的更改。

 

下面看看如何提交更改,其實很是簡單,只須要打開Source Control>Commit菜單,下面窗口就會出現:

讓咱們一步步看看它告訴咱們了什麼。在左邊(標1的區域),列出了全部被更改的文件,在這個例子中,只有ViewController.m這個文件 被改變,所以列表中只有它被顯示。若是你仔細觀察,你會發現文件左邊有一個選擇框,默認狀況下是被選中的,若是你取消它,這個文件的更改就不會被提交。

 

在窗口的中間區域,有兩個預覽窗口,左邊那個是文件當前版本,右邊是文件上一次提交更改的版本。由於咱們目前只是建立時提交過一次更改,所以右邊顯示的是文件的初始狀態。


左邊窗口藍色區域標出的就是更改的內容,這樣的表示讓咱們能夠清楚地看出全部的修改。若是你仔細看,會發如今兩個窗口之間還有一個帶數字的小標籤,這個數 字一一表示了各項更改。在數字旁邊,默認狀況下有一個小對勾,表示本更改會被提交,若是你點擊右邊的小箭頭,會彈出一個選項菜單,你能夠選擇不提交這個更 改或是忽略它。


 

若是你選擇了Don’t Commit這個選項,小對勾就會被一箇中止標誌取代,這項更改就不會被保存到源中。

 

 

若是你選擇了Discard Change這個選項,會彈出一個確認窗口,提示你所作的更改會被恢復,而且沒法取消這個操做。

若是你點擊了OK按鈕,所選區域的改變就會消失,就像他們從未出現過同樣。

 

若是你仔細觀察上面這個提交窗口,你會看到你所作的全部修改都會被Xcode看作改變,即便是一個空行。實際上空行至關於回車,在屏幕上是不可見的,所以做爲改變也是理所固然的。

 

在本例子中,你不用忽略任何修改,而是容許提交全部更改,所以全部的改變標籤旁邊必須都是小對勾。

 

在兩個窗口下面是一個空白的區域,中間顯示了提交更改的信息。這個地方能夠添加一些關於這次更改的簡短描述,點擊它,加入以下內容:

書寫有意義的提交信息很是有用,尤爲是當你頻繁提交的時候。所以,把它當作一個必要的步驟。

 

如今這個窗口的基本信息看的差很少了,是時候作咱們第一次的提交了。在這個窗口的右下腳,有一個按鈕上面寫着:Commit 1 file。

這個按鈕會顯示須要提交的文件總數。點擊它以後你的第一次提交就完成了!打開Source control > History,你會發現它會被顯示在列表中。

從上圖中能夠看出,咱們編寫的信息以及更改的文件數量會被顯示出來。Xcode執行初始提交,全部文件都會被提交一下,而此次只有咱們修改的那個文件被提交。


另外,關閉歷史窗口,看一下Project Navigator,你會發現ViewController.m旁邊的M符號已經消失了。


如今,讓咱們準備下一次提交。此次,咱們給工程添加一些新的文件。添加文件最好的方式就是建立個新類,所以,按下Command+N組合鍵,添加一個Objective-C類。讓這個類繼承NSObject類,取名叫TestClass,而後添加到工程中。


完成以後,注意一下Project Navigator,你會發現兩個新的類文件旁邊有個A的字母標識,這意味着這些文件已經被添加到項目中,固然,他們尚未被提交。


打開ViewController.h文件,導入咱們的新類:

 
 
 
 
 
  1. #import "TestClass.h"  

下一步,打開ViewController.m文件,像下面同樣聲明一個私有屬性:

 
 
 
 
 
  1. @interface ViewController ()  
  2.  
  3. @property (nonatomic) int sum;  
  4.  
  5. @property (nonatomic, strong) TestClass *testClass;  
  6.  
  7. @end  

看一下項目導航欄,此次有四個文件有待提交。讓咱們打開Source Control > Commit菜單,將它們提交。

須要提交的一共有5個文件。除了以前修改的四個以外,還有一個項目配置文件。Xcode會在新類被添加到項目中以後自動修改這個文件。若是你你打開TestClass.h或TestClass.m文件,左邊的窗口沒有任何顯示,以下圖所示。

這是由於在這個文件在以前沒有被提交的記錄,所以沒有一個能夠比較的版本,在右邊只顯示了File was added。


在消息區寫上這樣一個描述:TestClass was added to project.. 以後點擊Commit 5 files按鈕便可。


這樣第二次手動提交就成功了。你能夠到Source Control > History 菜單查看提交的記錄。

版本之間的比較(Comparing Versions)
當你提交了同一工程的不一樣版本以後,在他們之間比較,追蹤修改信息就會很是方便。當新添加的代碼不能運行時,這時與之間版本進行比較就很是重要了,你能夠看出新版本相比上個穩定版有了哪些更改。

 

要比較同一個文件的兩個版本,你可使用View>Version Editor>Show version editor,或是點擊工具欄上的Version Editor按鈕:

點擊以後,編輯器會分爲兩欄。最初,兩欄會顯示相同的內容,點擊編輯器下面的那個小時鐘圖標,能夠選擇以前已經提交的版本進行比較。

點擊以後,兩個版本的區別會在編輯器中顯示出來。一般,左邊顯示的是當前版本的文件,右邊顯示的是以前的版本。藍色高亮的區域顯示了被更改的代碼,所以比較代碼的變化很是容易。繼續選擇任何此前的版本,並觀察兩欄的區別。

你可能會注意到,在兩個編輯器中間,還有在提交窗口看到的小標籤。點擊向下的按鈕能夠跳出讓你忽略更改的選項。若是你點擊了忽略更改,Xcode會提示你是否贊成。若是你贊成忽略,這些被忽略的代碼將會永遠消失,沒法再找回來。因此要注意不要無心中忽略任何代碼。
 

除了上面說到的方法,還有一種你回到以前版本的方法。若是你仔細觀察兩個編輯器下面的工具欄,在中間有個帶箭頭的時鐘圖標:

點擊它以後,兩個面板之間的縱列內容就發生了改變,變成了一系列表示以前更改的時間戳。注意並非全部的都表明實際提交。表明先前版本的圓角矩形的數量取決於提交的次數。在這個例子中,只有兩個這樣的圖形,表明了兩次提交。

在這一列的下面,有兩個箭頭。左邊的那個屬於左邊的面板,右邊的箭頭屬於右邊的面板。將箭頭移動到任意以前的版本,你會看到在相應面板中的改變。如 果你想比較當前版本和以前任意版本的區別,讓一個箭頭指向local行,而後移動第二個箭頭。時間戳從底部到頂部表明了重新到舊的代碼。在base行,你 會看到上一次提交的內容。繼續向上移動,你會看到最初的提交,以下圖所示:

如今你知道如何比較版本之間的區別了。再繼續深刻以前,把前面學習的練習一下玩玩吧。


到底是誰的錯?(Who’s Got the Blame)
除了比較文件的版本外,Xcode還可讓你追蹤文件的提交者,以及是誰改變了哪一部分代碼。在一個多人的團隊中,這非 常有用。要使用這個功能,點擊View > Version Editor > Show Blame View菜單。或是講鼠標放在工具欄的Version editor 按鈕上,選擇Blame選項。一個與上面相似的窗口將會出現:

正如你看到的,當前文件依據不一樣的提交被水平線分紅幾段,每一個代碼段的做者,以及提交信息和其餘信息顯示在窗口右邊的一個特殊面板中。

若是你尚未作過,那本身動手打開這個blame視圖,注意一下Xcode展示代碼段做者的方式。在這個視圖中,能夠方便地找到某一代碼在什麼時候被誰 提交以及其餘你想要的信息。將鼠標放在blame面板上,將會顯示修改的一些其餘信息。當指針停在提交段上時,一個帶圖片的小按鈕就會出如今它的右邊。點 擊選中該段代碼,就會彈出一個附帶提交信息窗口。在這個窗口中,你還能夠跳轉到比較窗口(indication #1),以及特定提交的修改文件(indication #2)。


 

除了比較視圖和blame試圖,其實還有一個日誌視圖(Log view)。你能夠經過View > Version Editor > Show Log View來打開它。或者若是你在這裏就不在詳細說它了。你能夠本身去看看,畢竟這個用起來也沒那麼複雜。


分支(Branches)
試想一下,你如今的工程有一個即將發佈的版本,或是已經發布的版本,你忽然想添加一些新的特性,如何防止這些新添加的代碼讓整個項目陷入癱瘓呢?答案很簡單:你須要使用分支。


如何簡單的理解分支呢?你能夠把你的項目想象成一棵樹,穩定版本就是樹的主幹。任何添加新功能的版本都必須是樹幹的一部分。分支,就像是樹的枝幹,它從樹 幹生長出來,向不一樣的方向生長。在git中,你能夠經過建立分支來爲你的代碼設置一個新的路徑來實現新特性,而不用擔憂在開發中破壞主幹。

 

實際上,在git中默認都會有一個分支,叫作master。Xcode自動執行的第一次提交中就發生在這個分支中。一般,單獨的開發者只在 master這個分支開發,這其實不是一個好習慣。不管你是單打獨鬥仍是組團合做,我認爲在對項目做出重大改變或添加劇大功能時,使用分支是十分重要的, 它會爲你避免不少麻煩。固然,在團隊項目中,爲你本身負責部分的代碼搞一個分支幾乎是必須的。

關於分支,你必須記住如下兩點:
1. 提交到App Store或客戶的最終產品必須是項目中的master分支項目。
2. 任何在第二分支中實現的代碼或者功能最終都必須合併到master分支,這樣正式發佈的應用程序纔是完整的。(之後再講這一點)

 

當你開始一個新分支時,你其實是以當前工做狀態做爲起點,即便你有任何未提交的更改。從這個時候起,全部的改變都會只體如今分支中。

 

如今讓咱們回到Xcode,要建立一個分支,點擊Source Control > GitDemo-master > New Brance…這個菜單,而後會彈出以下菜單:

爲這個分支起一個名字,我就把它起名爲AnotherBranch好了。如今你怎麼給它起名其實都無所謂。點擊OK按鈕,等一下新的分支就會被建立,而當前的代碼也會複製到新分支中去。

 

打開Source Control菜單,你就能夠輕鬆地找出活動分支是哪個:它就在項目名字的旁邊。

如今,讓咱們作一次新的分支的提交。在這以前,讓咱們添加一些新的代碼。打開類文件,在私有屬性區添加如下方法聲明:

 
 
 
 
 
  1. @interface ViewController ()  
  2.  
  3. ...  
  4.  
  5. -(void)sayHello;  
  6.  
  7. @end  

 而後實現它:

 
 
 
 
 
  1. -(void)sayHello{  
  2.     NSLog("Hello");  
  3. }  

最後,在viewDidLoad中調用它:

 
 
 
 
 
  1. - (void)didReceiveMemoryWarning  
  2. {  
  3.     ...      
  4.  
  5.     [self sayHello];  
  6. }  

如今,點擊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都會高亮顯示二者之間的區別。經過這樣,你能夠方便地跟蹤全部分支間代碼的改變。

最後,切換到另外一個分支,或是master分支,你能夠點擊Source Control > GitDemo –AnotherBranch > Switch to Branch…菜單。

從這個窗口你能夠選擇想要跳轉的分支,在這裏讓咱們跳回master分支:

選擇它並點擊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飛一會,而後,到ViewController.m文件中,再建立一個私有方法,首先聲明它:

 
 
 
 
 
  1. @interface ViewController ()  
  2.  
  3. ...  
  4.  
  5.  
  6. -(void)sayByeBye;  
  7.  
  8. @end  

而後實現它:

 
 
 
 
 
  1. -(void)sayByeBye{  
  2.     NSLog("Bye - Bye");  
  3. }  

最後,在ViewDidLoad方法中調用它:

 
 
 
 
 
  1. - (void)viewDidLoad  
  2. {  
  3.     ...      
  4.  
  5.     [self sayByeBye];  
  6. }  

在合併以前,先提交這些更改。使用Source Control > Commit菜單來執行提交。

終於仍是來到這一步,關於把兩個不一樣的分支合併成一個,你有兩種選擇「
1. 從分支合併:與你選擇的分支相關的任何改變都會被合併到如今活動分支中。
2. 合併到分支:當前活動分支的任何改變都會被合併到你選擇的分支中。

 

這兩種方式你均可以在Source Control > GitDemo 菜單中找到。注意當你的活動分支是master分支時,第二個選項是不可選的。

 

假設一個開發者在Anotherbranch分支實現一個sayHello方法,另一個開發者在LastBranch中建立實現了 sayByeBye方法,如今你須要將兩我的的工做合併到下一個穩定版本中,想想你須要怎麼作?很簡單,按如下方法將改變從兩個分支中合併進來:

 

首先,確保當前活躍分支是master分支。

 

而後,打開Source Control > GitDemo – master > Merge From Branch…菜單,選擇AnotherBranch而後點擊Merge按鈕。

接下來會出現一個比較窗口,在裏面你會看到合併以後代碼的更改,看一眼,感受差很少了就再點擊Merge按鈕。

Xcode會詢問你是否保存項目的快照,點擊Enable按鈕。讓Xcode飛一會,而後就好啦。AnotherBranch裏面添加的內容已經合併到master分支中。

 

使用一樣的方法來合併LastBranch。你會發現若是你不提交更改,Xcode不會讓你再次合併。因而,咱們只好先提交一下。在比較窗口你會發現一個紅色的區域顯示合併以後的更改,而不是以前的藍色。這意味着分支中的代碼將會替換原先活動分支中的代碼。

你能夠輕鬆地避免這種現象的發生。在編輯面板的下面有幾個小按鈕,你能夠試試他們都有什麼做用,我選了第一個,它的意思是master分支的代碼會被放在上面,另外一個分支的代碼會跟在它後面。

處理接下來全部須要更改的代碼,不要有遺漏。完過後就點擊Merge按鈕。


恭喜你!你已經成功的學會從多個分支合併了代碼,相似的情形你也應該會了。

 

忽略更改(Discarding Changes)
放棄不想要的代碼更改功能很是有用,只需輕輕一點,自從上一次提交以後的更改都會被放棄。當你在開發過程當中發現出了大亂 子,你想從上一個穩定狀態從新開始時,這個功能就派上用場啦。注意放棄更改這個功能沒有回頭路,點完以後你就沒有辦法再撤銷這個操做,因此,要當心使用 啊!

 

以前,當咱們在討論版本比較時,咱們學會了如何忽略某一部分更改的方法,下面,咱們要學一下如何一下忽略自從上一次提交以後的全部更改。

 

爲了測試這個功能,首先寫一些代碼打開ViewController.h ,添加一個公共方法聲明:

 
 
 
 
 
  1. @interface ViewController : UIViewController  
  2.  
  3. -(void)aVeryCoolMethod;  
  4.  
  5. @end  

如今,讓咱們在ViewController.m中添加一個這個方法的實現,簡單點就行:

 
 
 
 
 
  1. -(void)aVeryCoolMethod{  
  2.     NSLog("I'm feeling that you'll discard me... Really?");  
  3. }  

若是你注意到Project Navigator,咱們剛剛更改的文件旁邊有了一個M標識,很好,咱們想看看若是忽略這些更改,這些文件是否會回到更改以前的狀態。

 

這裏有一個重要的細節:你能夠選擇忽略全部文件的更改,也能夠選擇忽略單個文件的更改,這徹底取決於你。若是你想忽略一個文件的更改,首先選定這個 文件。在這個例子裏,若是你只選擇ViewController.m文件而後打開Source Control菜單,你會在ViewController.m中發現Didcard Changes這個選項。相似的,若是你只選擇ViewController.h也是一個道理。然而,若是你想忽視這兩個文件的更改(這裏假定有兩個以上 的更改),就在Project Navigator中選中它們,而後再打開Source Control菜單。相應的位置就會顯示Discard Changes in 2 Files,像下面這樣:

然而,此次咱們不會使用這個按鈕,咱們要用Discard All Changes。點擊它以後,一個肯定提示框就會出現,這是這部分Xcode防止你誤刪代碼的惟一措施。

點擊Discard All Changes, 那你剛纔寫的那個公共方法就永遠屬於過去了。看到了吧,只需幾步就可讓你從當前工做狀態恢復到以前的提交,因此我再一次提醒你要在使用Source Control 中當心點,別誤點了這個按鈕。

 

總結 經過這篇教程,我盡力詳述了在Xcode中進行版本控制的方法。其實在幕後,真正起做用的是git----地球上應用最 多的版本控制系統。你可能注意到我在教程中並無過多的提到GitHub或者任何Xcode的一些功能----其實我是故意這樣的。我想把注意力集中在使 用Xcode進行git管理的內容上。只有當你懂得了如何進行版本控制以後,才能真正的使用GitHub。我想再重申一下,若是你是一個團隊在工做,使用 版本控制工具是必須的!若是你是單打獨鬥,使用版本控制工具也是頗有必要的,它能夠爲你花大量時間和精力所作的工做提供保障,而且在你添加新功能時可簡單 地進行擴展。這個工具就像有些人說的那樣,一旦用了,就再也回不去了!最後,我但願這個教程會對你有用。

相關文章
相關標籤/搜索