1. 程式人生 > >git使用詳解 terminal命令/sourceTree/Xcode

git使用詳解 terminal命令/sourceTree/Xcode

說到git,必須要先談一下版本控制。什麼是版本控制?我為什麼要關心它呢?版本控制是一種記錄一個或若干檔案內容變化,以便將來查閱特定版本修訂情況的系統。

版本控制的型別大致可以分為三大類:

本地版本控制系統

其中最流行的一種叫做 rcs,它的工作原理基本上就是儲存並管理檔案補丁(patch)。檔案補丁是一種特定格式的文字檔案,記錄著對應檔案修訂前後的內容變化。所以,根據每次修訂後的補丁,rcs可以通過不斷打補丁,計算出各個版本的檔案內容。

集中化版本控制系統

為了讓在不同系統上的開發者協同工作,集中化的版本控制系統( Centralized Version Control Systems

,簡稱 CVCS)應運而生。這類系統,諸如 CVSSubversion以及 Perforce等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工作的人們都通過客戶端連到這臺伺服器,取出最新的檔案或者提交更新。多年以來,這已成為版本控制系統的標準做法。然而,事分兩面,有好有壞。這麼做最顯而易見的缺點是中央伺服器的單點故障。如果宕機一小時,那麼在這一小時內,誰都無法提交更新,也就無法協同工作。要是中央伺服器的磁碟發生故障,碰巧沒做備份,或者備份不夠及時,就會有丟失資料的風險。最壞的情況是徹底丟失整個專案的所有歷史更改記錄,而被客戶端偶然提取出來的儲存在本地的某些快照資料就成了恢復資料的希望。但這樣的話依然是個問題,你不能保證所有的資料都已經有人事先完整提取出來過。本地版本控制系統也存在類似問題,只要整個專案的歷史記錄被儲存在單一位置,就有丟失所有歷史更新記錄的風險。

分散式版本控制系統

分散式版本控制系統( Distributed Version Control System,簡稱 DVCS),在這類系統中,像 GitMercurialBazaar以及 Darcs等,客戶端並不只提取最新版本的檔案快照,而是把程式碼倉庫完整地映象下來。這麼一來,任何一處協同工作用的伺服器發生故障,事後都可以用任何一個映象出來的本地倉庫恢復。因為每一次的提取操作,實際上都是一次對程式碼倉庫的完整備份。

版本控制的類別說完了,那麼為什麼要如此重視git呢?基於其分散式版本控制的優點和工作(建立和切換分支等)的高效性,git已經越來越流行,在國內的IT開發中也會慢慢取代SVN的。當然取代只是博主個人觀點,so,上幹活。

git 的命令列的使用

1、git的初始化 首先在桌面上建立gitTest資料夾,然後建立ios專案並儲存到gitTest資料夾下。當然,這裡講的是git的初始化,所以在建立工程的時候不要勾選建立git倉庫選項,如下圖:
由於mac系統是自帶git的,所以git的命令在mac是直接可以使用的。 首先開啟終端看一下本機的git版本:$ git version
對於一個沒有進行版本控制的工程進行初始化(這裡是對gitTest檔案進行初始化) (1)進入目錄 (2)初始化倉庫 $ git init (3)新增檔案到倉庫的暫存區中 $ git add .(新增所有檔案到暫存區)   (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  //徹底關掉Finder

注意:os 10.10之前不用使用killall Finder,只要關掉Finder再重新開啟就能看到效果,os 10.11需要killall Finder才能看到效果

截圖如下:


至此已經把專案加入到了本地的倉庫中,即git初始化完成。在對檔案進行修改的過程中還會使用到一下git 命令:

$ git status  //檢視檔案的狀態

$ git diff  //檢視未加入暫存區的修改的檔案內容

$ git diff --cached //檢視已經加入暫存區的修改的檔案內容

$ git log  //檢視提交的記錄

$ git reset  //撤銷修改

2、git status例項如下圖:

說明:凡是有改動但沒有加入到暫存區的檔案都顯示在Changes not staged for commit:下;凡是加入到暫存區沒有提交的檔案都在Changes to be commit:下。

注意:提交的時候,git只會把暫存區中的檔案提交到倉庫中;所以提交的時候一定要看清楚檔案的狀態;


3、git diff 例項如下:

說明:由下圖可以看出在檔案中增加了look diff,然後用git diff 命令可以看出未加入暫存區的檔案的修改;用git diff --cached檢視加入暫存區的檔案修改;當採用 git add . 把所有檔案都加入到暫存區後使用 git diff是檢視不到任何修改的。


4、git log例項如下:

說明:git log 會根據提交時間列出所有提交的記錄;git log -2 會列出最近兩次的提交記錄;git log -p -2 會詳細的列出最近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

回退工作區的修改 (本地原始碼會改變)

git checkout -- filename  撤銷工作區的修改(即沒有add之前修改)

回退到沒有任何修改之前和伺服器一樣

git reset --hard origin/master  //將本地版本回退到和遠端伺服器一樣

6、git 分支

幾乎每一種版本控制系統都以某種形式支援分支,而git的分支可以說是git的必殺技(速度快,操作簡單)。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。

命令如下:

<1>、建立新的分支   $ git branch 分支名

<2>、切換分支   $ git checkout 分支名

注意1和2可以合成一個命令來完成: $ git checkout -b 分支名

<3>、合併分支   (即把其他分支和當前分支合併在一起)

 (1)切換到要合併到的分支   $ git checkout 分支名

   (2)   進行合併  $ git merge 分支名

<4>、刪除分支  $ git branch -d 分支名

<5>、檢視所有分支 $ git branch

7、git新增標籤

<1>建立標籤    $ git tag -a 標籤名 -m ‘註釋’

<2> 切換標籤   $ git checkout 標籤名

<3> 刪除標籤   $ git tag -d 標籤名

<4> 檢視所有標籤  $ git tag

8、遠端倉庫操作

至此,git本地的版本控制用到的命令基本上都有了。接下來來看一下git本地倉庫和遠端倉庫的結合使用。這裡使用https://bitbucket.org倉庫託管網站。登入此網站後先註冊使用者,註冊完使用者後就可以獲得免費的私人倉庫,此倉庫可以允許最多5個人一起共享開發。具體使用方法,這裡就不多說了。開始上乾貨。

在bitbucket網站建立倉庫gitTest,建立完成後如下圖:


點選倉庫進入後,會有提示如下圖:


現在本地已經有了一個倉庫,接下來採用上圖中的第二種方法把本地倉庫推送到bitbucket上


執行完以下git命令之後如上圖,推送本地倉庫到遠端倉庫成功

<1>、$  git remote add origin 遠端倉庫路徑

<2>、$  git push -u origin --all  提交所有的檔案

從現在開始,如果改變了原生代碼並且要提交到遠端伺服器上就要進行以下三步:

<1> commit   提交原生代碼

<2>$ git pull   拉取伺服器上的最新程式碼

<3>$ git push  提交到遠端伺服器

接下來來看一下,本地沒有倉庫,需要從遠端倉庫上clone一份的情況

克隆的命令如下:

<1> git clone 遠端倉庫地址      --------------------直接克隆倉庫到本地,並且本地資料夾的名字和遠端倉庫的名字一樣 <2> git clone 遠端倉庫地址  本地資料夾名字  --------------------直接克隆倉庫到本地,並且本地資料夾的名字和遠端倉庫的名字不一樣 從已有倉庫中獲取乾淨的程式碼

//獲取乾淨的程式碼

git archive --format zip --output /Users/Nick/Desktop/git/output.zip master -0


Xcode git版本控制

Xcode 中的操作如下圖所示:


sourceTree 進行程式碼的控制

sourceTree是git倉庫的客戶端,可以在appSotre中或去官方網站下載。

1、新增新的倉庫


新增成功後如下圖所示:


2、開啟後並進行修改程式碼後的圖如下:


關於bitbucket和sourceTree的具體用法,請自行搜尋學習。