繼續,文章轉自:http://www.jz123.cn/text/2129570.html
上一篇介紹了Git的基本概念和一些基本命令,本篇的重點在如下三個部分:個人化定製你的Git,更酷更巧妙的使用Git,以及如何在Git Hub上開啟你自己的開源項目。在所有技巧中,最重要的技巧是學會查看Git的協助,因為Git是一個相對複雜的版本控制工具,如果你熟悉它的命令,那麼給你帶來的價值是不言而喻的,所以要學會掌握那根金手指─查看Git的協助,在任何Git命令後加上'--help'就會顯示該命令的協助文檔,例如 'git log --help'你就可以看到命令'git log'的所有使用方法。接下來,從打扮Git開始吧。
Git梳妝
我們可以利用Git的config命令或者直接編輯~/.gitconfig檔案(如果沒有的話建立它)來為自己打造獨一無二的Git。我建議直接編輯使用者目錄下得.gitconfig檔案,拿我本地的檔案為例,一一為大家解說,完整的檔案內容如下:
[user]
name = Phoenix
email = phoenixtoday@gmail.com
[alias]
co = checkout
ci = commit -a
st = status
br = branch
oneline = log --pretty=oneline --since='2 days ago'
onelog = log -p -1
[color]
status = auto
branch = auto
ui = auto
該檔案主要包含三個部分的內容:
使用者基本資料:可以設定你的名字和email,這樣在你提交代碼的時候就會顯示出你的名字
命令別名:這是.gitconfig檔案中,我最喜歡的部分,它可以大大減少你敲擊鍵盤的次數(俗話說優秀的程式員都很懶麼)。在該檔案中,我將co設定為checkout的別名,那麼下次我只要用'git co new_branch'就可以切換到new_branch分支下了,簡潔而優雅;將ci設定為commit -a的別名,-a選項表示我不需要將修改和刪除的檔案通過'git add'命令來加入索引,這樣設定在使用'git ci -m"message"'這樣的命令時,相當於連續執行了'git add 被修改和刪除的檔案'和'git
commit -m"message"'兩條命令,再一次節省了我們寶貴的時間;最酷的是最後兩行,後面的章節會一一介紹。Git提供許多優雅、人性化的選項,我們如果再結合別名的設定,可以發揮你最大的想象力,真的讓你自己的Git活起來
顏色:每次看diff時是不是挺痛苦的?那麼為什麼不給我們的Git加上顏色呢?只需要加上那三行,就可以讓紅色和綠色的提示出現在你的控制台中
Git靈動
現在來講講'git log','git stash','git formate-patch'三個命令的用法和技巧:
git log:不同於SVN,Git將代碼的記錄全部在本地複製了一份,所以這就使得'git log'這樣的命令使用起來非常的迅速,也是我最常使用的Git命令之一。在使用'git log'的時候,你可以加入很多的尾碼。'-p'表示查看修改的具體內容,例如'git log -p'它不但會列印出提交的時間、版本號碼、人員等,還會將具體的代碼修改部分列印出來;'-n'其中n表示一個數字,這表示列印出具體的幾個日誌,例如 'git -p -1'正如我的Git設定檔中設定的onelog別名的內容一樣,就表示列印出當前最新的一次日誌記錄及具體修改內容;'--since="時間/日期"','--until="時間/日期"'表示你希望尋找某個日期段的日誌記錄,例如'git
log --since="2 days ago" --until="1 hour ago"'就表示你希望尋找兩天前到一小時前的日誌記錄,Git是足夠聰明的,它可以將類似於'2 days ago'和'1 hour ago'這種表示時間的英語轉化為具體的時間數字;有的時候,你不希望翻很多頁才可以看到所有的日誌,你只希望看到簡短的說明,那麼Git為你提供列印格式的定製'git --pretty=格式種類',其中格式種類有full、short、oneline等,例如'git log pretty=oneline'就會將每條代碼記錄放在一行裡,看起來簡單明了
git stash:在第一篇中,我舉了一個使用branch解決緊急任務切換的問題,其實stash命令也可以很好的解決這樣的問題。當你不想提交當前完成了一半的代碼,但是卻不得不修改一個緊急Bug,那麼使用'git stash'就可以將你當前未提交到本地(和伺服器)的代碼推入到Git的棧中,這時候你的工作區間和上一次提交的內容是完全一樣的,所以你可以放心的修 Bug,等到修完Bug,提交到伺服器上後,再使用'git stash apply'將以前一半的工作應用回來。也許有的人會說,那我可不可以多次將未提交的代碼壓入到棧中?答案是可以的。當你多次使用'git
stash'命令後,你的棧裡將充滿了未提交的代碼,這時候你會對將哪個版本應用回來有些困惑,'git stash list'命令可以將當前的Git棧資訊列印出來,你只需要將找到對應的版本號碼,例如使用'git stash apply stash@{1}'就可以將你指定版本號碼為stash@{1}的工作取出來,當你將所有的棧都應用回來的時候,可以使用'git stash clear'來將棧清空
git format-patch:當你想給一個開源項目(例如Rails)提交一段代碼的時候,或者你想給小組成員展示一段你並不想提交的代碼,那麼你還是需要 patch的,Git的'format-patch'命令良好的支援了這個功能。我來基本描述一下使用這個命令的步驟和方法:第一,利用branch命令建立一個分支;第二,修改你的代碼;第三,在該分支上提交你的修改;第四,使用'git format-patch'命令來產生一個patch檔案,例如:'git format-patch master --stdout
> ~/Desktop/tmp.patch'就是將工作分支與master主乾的不同,存放在'~/Desktop'檔案夾下,產生一個叫做 tmp.patch的檔案(另一種簡單的版本是利用diff命令,例如'git diff ..master > ~/Desktop/tmp.patch'),這樣就產生了patch檔案。那麼別人就可以使用'git apply'命令來應用patch,例如'git apply ~/Desktop/tmp.patch'就是將patch打在當前的工作分支上
Git親友團
Git的提示還包括利用Git包含的和附加的一些強大工具,這些工具主要包括git svn、git citool、gitk和Git的自動提示指令碼:
git svn:Git和SVN可以很方便的整合在一起,這就大大減少了從SVN向Git遷移的學習成本,這也是我特別建議大家首次接觸Git的使用方式。git svn是一個Git內建的工具,你安裝了Git也就安裝了它,譬如說你們團隊有一個SVN伺服器,但是你想利用Git本地的一些強大特性,那麼你依然可以安裝Git,使用Git的branch功能,只不過再更新代碼和提交代碼的時候,使用git svn命令即可。在這裡我簡單的講講最常使用和需要注意的兩個命令,其餘的命令讀者可以通過'git svn --help'來查看:'git
svn rebase'命令取代了'svn update'用於將伺服器代碼更新到本地;'git svn dcommit'取代了'svn ci',需要注意的是,本地必須用Git提交了代碼之後,再使用'git svn dcommit'。只需要這樣,你就可以輕鬆地從SVN轉向Git了。
git citool:這是我個人使用率最頻繁的一個工具,上一篇文章也提到了,Git可以本地提交代碼,那麼你自然可以本地修改你的提交了,這個工具就是可視化介面,用於修改你本地的提交。只要在你的工作區間輸入'git citool',就會出現如下的介面
你可以用它來提交代碼,可以用它來將你本地的修改追加在上一次提交的代碼中,你還可以用它來修改你上次提交的資訊等等。這個工具可以大大協助你完成以前SVN不可能完成的任務
gitk:是一個查看主幹/分支情況的工具,它主要用於觀察整個項目的分支狀況,使用'gitk'命令就會出現一個圖形化介面供你查看,本篇就簡單的說一下,大家回去試試就知道了
Git 的自動提示指令碼:它是Shawn O. Pearce為了讓Git使用起來更方便而寫得Shell指令碼,你可以在http://gitweb.hawaga.org.uk/ 找到一個叫做gitcompletion的指令碼,下載下來,並按照該指令碼中指導的方式進行配置,你就具有了Git自動提示(敲入部分Git命令,再按 Tab鍵)的功能,而且有了這個指令碼,你也可以看到你當前工作在哪個branch下。惟一的不足是,它只支援Linux、Unix、Mac作業系統(推薦大家都用Mac進行開發)
Git實戰─Git Hub
經過這麼長時間理論知識的熏陶,想必大家早已躍躍欲試了,那麼我們在Git Hub上建立一個開源項目作為實戰演習吧。Git Hub是全球最大的Git伺服器供應商,每個帳號有100M的免費使用空間,網址是:https://github.com/
首先我們在Git Hub上建立一個帳號,按照上面指導的方法設定好你的認證資訊(每次提交代碼都會需要這個認證資訊)
然後,如建立一個項目(選擇Create a New Repository),名叫git usage
在伺服器端,你可以看到這個項目的資訊,包括項目原始碼的URL,如
在本地使用如下的命令,就可以完成你的第一次提交了:
mkdir git-usage(建立項目目錄) cd git-usage(進入項目目錄) git init(Git初始化) touch README(建立一個README檔案) git add README(增加該檔案到索引) git commit -m 'first commit'(本地提交) git remote add origin git@github.com:phoenixtoday/git-usage.git(增加遠程伺服器程式碼程式庫地址) git push origin master(將本地代碼提交到遠程伺服器上)
總結
我所在的項目小組自從使用Git後,發現Git提供的種種特性大大提高了我們的開發效率,在認識Git前我們無法想象一個版本控制工具可以讓開發工作單位切換變得如此自然流暢。所以我強烈推薦大家使用Git,你付出的學習絕對物有所值