說到Git馁痴,必須要先談一下版本控制谊娇。什么是版本控制?我為什么要關(guān)心它呢罗晕?版本控制是一種記錄一個或若干文件內(nèi)容變化济欢,以便將來查閱特定版本修訂情況的系統(tǒng)赠堵。
版本控制的類型大致可以分為三大類:
本地版本控制系統(tǒng)
其中最流行的一種叫做 rcs,它的工作原理基本上就是保存并管理文件補斗ㄈ臁(patch)茫叭。文件補丁是一種特定格式的文本文件,記錄著對應(yīng)文件修訂前后的內(nèi)容變化挖胃。所以杂靶,根據(jù)每次修訂后的補丁,rcs可以通過不斷打補丁酱鸭,計算出各個版本的文件內(nèi)容吗垮。
集中化版本控制系統(tǒng)
為了讓在不同系統(tǒng)上的開發(fā)者協(xié)同工作,集中化的版本控制系統(tǒng)( Centralized Version Control Systems凹髓,簡稱 CVCS)應(yīng)運而生烁登。這類系統(tǒng),諸如CVS蔚舀,Subversion以及 Perforce等饵沧,都有一個單一的集中管理的服務(wù)器,保存所有文件的修訂版本赌躺,而協(xié)同工作的人們都通過客戶端連到這臺服務(wù)器狼牺,取出最新的文件或者提交更新。多年以來礼患,這已成為版本控制系統(tǒng)的標(biāo)準(zhǔn)做法是钥。然而,事分兩面缅叠,有好有壞悄泥。這么做最顯而易見的缺點是中央服務(wù)器的單點故障。如果宕機一小時肤粱,那么在這一小時內(nèi)弹囚,誰都無法提交更新,也就無法協(xié)同工作领曼。要是中央服務(wù)器的磁盤發(fā)生故障鸥鹉,碰巧沒做備份,或者備份不夠及時悯森,就會有丟失數(shù)據(jù)的風(fēng)險宋舷。最壞的情況是徹底丟失整個項目的所有歷史更改記錄,而被客戶端偶然提取出來的保存在本地的某些快照數(shù)據(jù)就成了恢復(fù)數(shù)據(jù)的希望瓢姻。但這樣的話依然是個問題祝蝠,你不能保證所有的數(shù)據(jù)都已經(jīng)有人事先完整提取出來過。本地版本控制系統(tǒng)也存在類似問題,只要整個項目的歷史記錄被保存在單一位置绎狭,就有丟失所有歷史更新記錄的風(fēng)險细溅。
分布式版本控制系統(tǒng)
分布式版本控制系統(tǒng)( Distributed Version Control System,簡稱 DVCS)儡嘶,在這類系統(tǒng)中喇聊,像 Git,Mercurial蹦狂,Bazaar以及 Darcs等誓篱,客戶端并不只提取最新版本的文件快照,而是把代碼倉庫完整地鏡像下來凯楔。這么一來窜骄,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個鏡像出來的本地倉庫恢復(fù)摆屯。因為每一次的提取操作邻遏,實際上都是一次對代碼倉庫的完整備份。
版本控制的類別說完了虐骑,那么為什么要如此重視git呢准验?基于其分布式版本控制的優(yōu)點和工作(創(chuàng)建和切換分支等)的高效性,git已經(jīng)越來越流行廷没,在國內(nèi)的IT開發(fā)中也會慢慢取代SVN的糊饱。當(dāng)然取代只是博主個人觀點,so颠黎,上干活济似。
git 的命令行的使用
1、git的初始化首先在桌面上創(chuàng)建gitTest文件夾盏缤,然后創(chuàng)建ios項目并保存到gitTest文件夾下。當(dāng)然蓖扑,這里講的是git的初始化唉铜,所以在創(chuàng)建工程的時候不要勾選創(chuàng)建git倉庫選項,如下圖:
由于mac系統(tǒng)是自帶git的律杠,所以git的命令在mac是直接可以使用的潭流。
首先打開終端看一下本機的git版本:$ git version
對于一個沒有進行版本控制的工程進行初始化(這里是對gitTest文件進行初始化)
(1)進入目錄
(2)初始化倉庫 $ git init
(3)添加文件到倉庫的暫存區(qū)中 $ git add .(添加所有文件到暫存區(qū))
(4) 提交 文件到倉庫 $ git commit -m '注釋' (-m 加注釋的命令)
注意:3和4可以合成一個命令來完成 $git commit -a -m '注釋'
接下來看終端的操作:
倉庫初始化完之后,在文件夾下會生成一個.git的文件夾柜去,里面存放的是git的配置文件和工程的快照灰嫉。以點開頭的文件在mac下是隱藏文件,可以用下面的命名顯示mac的隱藏文件:$ defaults write com.apple.finder AppleShowAllFiles -bool true //顯示文件夾 嗓奢,隱藏文件夾只要把true改為false
$ killall Finder //徹底關(guān)掉Finder
注意:os 10.10之前不用使用killall Finder讼撒,只要關(guān)掉Finder再重新打開就能看到效果,os 10.11需要killall Finder才能看到效果
截圖如下:
至此已經(jīng)把項目加入到了本地的倉庫中,即git初始化完成根盒。在對文件進行修改的過程中還會使用到一下git 命令:
$ git status //查看文件的狀態(tài)
$ git diff //查看未加入暫存區(qū)的修改的文件內(nèi)容
$ git diff --cached //查看已經(jīng)加入暫存區(qū)的修改的文件內(nèi)容
$ git log //查看提交的記錄
$ git reset //撤銷修改
2钳幅、git status實例如下圖:
說明:凡是有改動但沒有加入到暫存區(qū)的文件都顯示在Changes not staged for commit:下;凡是加入到暫存區(qū)沒有提交的文件都在Changes to be commit:下炎滞。
注意:提交的時候敢艰,git只會把暫存區(qū)中的文件提交到倉庫中;所以提交的時候一定要看清楚文件的狀態(tài)册赛;
3钠导、git diff 實例如下:
說明:由下圖可以看出在文件中增加了look diff,然后用git diff 命令可以看出未加入暫存區(qū)的文件的修改森瘪;用git diff --cached查看加入暫存區(qū)的文件修改牡属;當(dāng)采用 git add . 把所有文件都加入到暫存區(qū)后使用 git diff是查看不到任何修改的。
4柜砾、git log實例如下:
說明:git log 會根據(jù)提交時間列出所有提交的記錄湃望;git log -2 會列出最近兩次的提交記錄;git log -p -2 會詳細(xì)的列出最近2次修改的記錄痰驱;下面的圖為提交了兩次后進行的操作
5证芭、git reset (回退/撤銷)
說明:
回退到之前的某個版本:(本地源碼會改變)
git reset --hard HEAD^ //回退到上個版本
git reset --hard HEAD^^ //回退到上上個版本
git reset --hard HEAD~100 //回退到前100個版本
git reflog //查看版本信息
git reset --hard 版本號 //回退到指定版本
撤銷本次commit (本地源碼不會改變)
git reset --soft HEAD^
撤銷add (本地源碼不會改變)
git reset 或者git reset --mixed
回退工作區(qū)的修改 (本地源碼會改變)
git checkout -- filename 撤銷工作區(qū)的修改(即沒有add之前修改)
回退到?jīng)]有任何修改之前和服務(wù)器一樣
git reset --hard origin/master //將本地版本回退到和遠(yuǎn)程服務(wù)器一樣
6、git 分支
幾乎每一種版本控制系統(tǒng)都以某種形式支持分支担映,而git的分支可以說是git的必殺技(速度快废士,操作簡單)。使用分支意味著你可以從開發(fā)主線上分離開來蝇完,然后在不影響主線的同時繼續(xù)工作官硝。
命令如下:
<1>、創(chuàng)建新的分支 $ git branch 分支名
<2>短蜕、切換分支 $ git checkout 分支名
注意1和2可以合成一個命令來完成: $ git checkout -b 分支名
<3>氢架、合并分支 (即把其他分支和當(dāng)前分支合并在一起)
(1)切換到要合并到的分支 $ git checkout 分支名
(2) 進行合并 $ git merge 分支名
<4>、刪除分支 $ git branch -d 分支名
<5>朋魔、查看所有分支 $ git branch
7岖研、git添加標(biāo)簽
<1>創(chuàng)建標(biāo)簽 $ git tag -a 標(biāo)簽名 -m ‘注釋’
<2> 切換標(biāo)簽 $ git checkout 標(biāo)簽名
<3> 刪除標(biāo)簽 $ git tag -d 標(biāo)簽名
<4> 查看所有標(biāo)簽 $ git tag
8、遠(yuǎn)程倉庫操作
至此警检,git本地的版本控制用到的命令基本上都有了孙援。接下來來看一下git本地倉庫和遠(yuǎn)程倉庫的結(jié)合使用。這里使用https://bitbucket.org倉庫托管網(wǎng)站扇雕。登錄此網(wǎng)站后先注冊用戶拓售,注冊完用戶后就可以獲得免費的私人倉庫,此倉庫可以允許最多5個人一起共享開發(fā)镶奉。具體使用方法础淤,這里就不多說了崭放。開始上干貨。
在bitbucket網(wǎng)站創(chuàng)建倉庫gitTest,創(chuàng)建完成后如下圖:
點擊倉庫進入后值骇,會有提示如下圖:
現(xiàn)在本地已經(jīng)有了一個倉庫莹菱,接下來采用上圖中的第二種方法把本地倉庫推送到bitbucket上
執(zhí)行完以下git命令之后如上圖,推送本地倉庫到遠(yuǎn)程倉庫成功
<1>吱瘩、$ git remote add origin 遠(yuǎn)程倉庫路徑
<2>道伟、$ git push -u origin --all 提交所有的文件
從現(xiàn)在開始,如果改變了本地代碼并且要提交到遠(yuǎn)程服務(wù)器上就要進行以下三步:
<1> commit 提交本地代碼
<2>$ git pull 拉取服務(wù)器上的最新代碼
<3>$ git push 提交到遠(yuǎn)程服務(wù)器
接下來來看一下使碾,本地沒有倉庫蜜徽,需要從遠(yuǎn)程倉庫上clone一份的情況
克隆的命令如下:
<1> git clone 遠(yuǎn)程倉庫地址 --------------------直接克隆倉庫到本地,并且本地文件夾的名字和遠(yuǎn)程倉庫的名字一樣
<2> git clone 遠(yuǎn)程倉庫地址 本地文件夾名字 --------------------直接克隆倉庫到本地票摇,并且本地文件夾的名字和遠(yuǎn)程倉庫的名字不一樣
從已有倉庫中獲取干凈的代碼
//獲取干凈的代碼
git archive --format zip --output /Users/Nick/Desktop/git/output.zip master -0
Xcode git版本控制
Xcode 中的操作如下圖所示:
sourceTree 進行代碼的控制
sourceTree是git倉庫的客戶端拘鞋,可以在appSotre中或去官方網(wǎng)站下載。
1矢门、添加新的倉庫
添加成功后如下圖所示:
2盆色、打開后并進行修改代碼后的圖如下:
關(guān)于bitbucket和sourceTree的具體用法,請自行搜索學(xué)習(xí)祟剔。
注明:轉(zhuǎn)載自 Nick的專欄 http://blog.csdn.net/xiaonaiping061/article/details/49685675