轉(zhuǎn)發(fā)自:http://www.cocoachina.com/ios/20140524/8536.html
對于個人開發(fā)者來說验庙,版本控制系統(tǒng)并不是必需的,但是我們?nèi)匀粡娏彝扑]開發(fā)者使用它父丰,因為它可以使代碼方便的在有錯誤的版本和可以工作的版本之間轉(zhuǎn)換。事實上,很多開發(fā)者從來不使用類似的工具蛾扇,他們會在項目添加新的功能時手動保存原先的項目攘烛。這其實是一個很不好的習(xí)慣,因為版本控制軟件可以更好更高效地完成這項任務(wù)镀首。
Git是一個常見的版本控制系統(tǒng)坟漱,它最開始是由Liunx之父Linus Torvalds開發(fā)的,git使用虛擬目錄更哄,又稱為repositories芋齿,來管理一切事物。Git可以通過命令行調(diào)用成翩,也有專門為它設(shè)計的桌面應(yīng)用軟件觅捆。如果Git對你來說很陌生,我建議你在網(wǎng)上查看一些它的相關(guān)信息麻敌。關(guān)于Git更深層次的內(nèi)容都不在本文的討論范圍之內(nèi)惠拭。
從Xcode5開始引入了使用git的一些新特性。它將git的各項功能整合到一個菜單中庸论,并提供子菜單來進行軟件合并的控制。在接下來的閱讀中你會發(fā)現(xiàn)棒呛,使用git來進行版本控制相當?shù)暮唵慰旖荨?/p>
創(chuàng)建一個Git源(Creating a Git repository)
每次在Xcode中創(chuàng)建新工程的時候,都會提示開發(fā)者是否將項目作為一個本地的git源簇秒。在創(chuàng)建工程的最后一步Xcode會有一個復(fù)選框鱼喉,如果選擇了它,git源就會被添加到工程目錄中趋观。通常這個選項會被忽視扛禽,或是被認為是Xcode的另外一個沒用的功能,尤其是從未用過git的開發(fā)者皱坛,或是編程新手编曼。
這步非常關(guān)鍵:默認情況下,這個選項是被選上的剩辟,如果你不想使用git掐场,你可以取消它,但是我不建議這么做贩猎。本教程中熊户,你需要將它勾選上,然后點擊創(chuàng)建按鈕吭服。
創(chuàng)建完項目之后嚷堡,打開Finder找到項目存儲的目錄,在目錄中有一個.git的子目錄艇棕,是Xcode為存儲git源相關(guān)數(shù)據(jù)自動創(chuàng)建的蝌戒。如果你看不到.git目錄串塑,你需要讓隱藏的文件可見。
打開一個Terminal窗口瓶颠,輸入以下命令:
defaults writecom.apple.finderAppleShowAllFiles TRUE? (OSX10.9之后)
//defaults writecom.apple.FinderAppleShowAllFiles TRUE? ? (OSX10.9之后)
然后重啟Finder應(yīng)用
killall Finder
顯然使用Xcode創(chuàng)建一個git源毫不費力,然而粹淋,如果你在項目創(chuàng)建時未創(chuàng)建git源吸祟,之后又想加上這個功能怎么辦呢?
1)首先通過Xcode下載Command Line Tools桃移。Xcode>Preferences>Download>Components區(qū)屋匕,點擊Commond Line Tools右邊下載按鈕。(如果沒有說明你已經(jīng)下載過了)
2)打開Terminal窗口借杰,依次執(zhí)行如下命令
cd /Users/Mac的用戶名/Desktop/項目名稱? ? ? ? ? ? ? //換到新項目的目錄
git init//初始化一個空的源
git add.//當前目錄所有的內(nèi)容就被添加到源里面
git commit-m'Initial commit'
接下來會出現(xiàn)一個本地git源所執(zhí)行的改變列表过吻,如下圖所示:
3)重啟Xcode
如果你再次打開Source Control菜單,你會發(fā)現(xiàn)所有的選項已經(jīng)可以使用了蔗衡,就像一開始勾選上創(chuàng)建git源一樣纤虽。
默認情況下绞惦,Xcode在項目創(chuàng)建之初會提交一次更改逼纸,這是為了保存項目初始狀態(tài)。如果你在項目創(chuàng)建時沒有添加git源济蝉,但是之后你手動添加了杰刽,你可以通過我們先前使用過的命令來進行提交:git commit -m ‘Initial commit’
去Source Control>History…菜單王滤,你就會看到初次提交更改的記錄贺嫂,以后每次提交更改,都會在這里有所記錄雁乡。
修改了ViewController.m中的代碼,在Project navigator面板ViewController.m文件旁邊會出現(xiàn)了一個M字母踱稍,表示有未提交的更改
只需要打開Source Control>Commit菜單寞射,下面窗口就會出現(xiàn)
標1的區(qū)域:列出了所有被更改的文件渔工。注意:文件前有選擇框,默認情況下是被選中的桥温,如果你取消它引矩,這個文件的更改就不會被提交。
標4的區(qū)域:在數(shù)字旁邊,默認情況下有一個小對勾旺韭,表示本更改會被提交氛谜,如果你點擊右邊的小箭頭,會彈出一個選項菜單区端,你可以選擇不提交這個更改或是忽略它值漫。
選擇了Don’t Commit:表示這項更改就不會提交
選擇了Discard Change:表示所做的更改會被恢復(fù),并且無法取消這個操作织盼。
書寫有意義的提交信息非常有用杨何,尤其是當你頻繁提交的時候。因此沥邻,把它當做一個必要的步驟危虱。
當你提交了同一工程的不同版本之后,在他們之間比較唐全,追蹤修改信息就會非常方便埃跷。當新添加的代碼不能運行時,這時與之間版本進行比較就非常重要了邮利,你可以看出新版本相比上個穩(wěn)定版有了哪些更改弥雹。
比較同一個文件的兩個版本,使用View>Version Editor>Show version editor
編輯器下面的那個小時鐘圖標延届,可以選擇之前已經(jīng)提交的版本進行比較缅糟。
除了比較文件的版本外祷愉,Xcode還可以讓你追蹤文件的提交者,以及是誰改變了哪一部分代碼赦颇。在一個多人的團隊中二鳄,這非常有用。
點擊View > Version Editor > Show Blame View
當前文件依據(jù)不同的提交被水平線分成幾段媒怯,每個代碼段的作者订讼,以及提交信息和其他信息顯示在窗口右邊的一個特殊面板中。
試想一下扇苞,你現(xiàn)在的工程有一個即將發(fā)布的版本欺殿,或是已經(jīng)發(fā)布的版本,你突然想添加一些新的特性鳖敷,如何防止這些新添加的代碼讓整個項目陷入癱瘓呢脖苏?答案很簡單:你需要使用分支。
關(guān)于分支定踱,你必須記住以下兩點:
1棍潘、提交到App Store或客戶的最終產(chǎn)品必須是項目中的master分支(主分支)項目。
2、任何在第二分支中實現(xiàn)的代碼或者功能最終都必須合并到master分支亦歉,這樣正式發(fā)布的應(yīng)用程序才是完整的恤浪。(以后再講這一點)
點擊Source Control > GitDemo-master > New Brance
打開Source Control菜單水由,你就可以輕松地找出活動分支是哪一個:它就在項目名字的旁邊。
打開Version Editor(menu View > Version Editor > Show Version Editor),找到右邊編輯面板下面的工具欄濒募,你會看到被選中的分支是AnotherBranch鞭盟,點擊它,你會看到這個分支和master分支同時出現(xiàn)瑰剃,從master分支中選擇任意版本齿诉,Xcode都會高亮顯示兩者之間的區(qū)別。通過這樣晌姚,你可以方便地跟蹤所有分支間代碼的改變粤剧。
切換到另一個分支挥唠,或是master分支抵恋,你可以點擊Source Control > GitDemo –AnotherBranch > Switch to Branch…菜單。
注意:在合并之前宝磨,先提交更改
關(guān)于把兩個不同的分支合并成一個弧关,你有兩種選擇
1、 從分支合并:與你選擇的分支相關(guān)的任何改變都會被合并到現(xiàn)在活動分支中唤锉。
2世囊、合并到分支:當前活動分支的任何改變都會被合并到你選擇的分支中。
這兩種方式你都可以在Source Control > GitDemo 菜單中找到窿祥。注意:當你的活動分支是master分支時株憾,第二個選項是不可選的。
首先晒衩,確保當前活躍分支是master分支嗤瞎。
然后,打開Source Control > GitDemo – master > Merge From Branch…菜單听系,選擇AnotherBranch然后點擊Merge按鈕贝奇。
完事后就點擊Merge按鈕。
xcode提交版本時提示The working copy “MyPro” failed to commit files.