由於工作的需要,代碼版本控制工具要從Perforce換成Git。說實話,剛開始真的很不適應,要從一個可以很好的支持用戶界面的工具轉到一個命令行工具,而且Git中有幾百個命令,一下子就傻眼了。
但是經過一段時間的使用和熟悉,已經慢慢適應了。所有准備一個整理一個Git使用系列,是對自己使用Git的一個總結,也希望可以對同樣剛開始使用Git的同學一些幫助。下面就開始探索Git了。
Git簡介
Git是Linus用C實現的一個分布式版本控制工具,注意這里對分布式的強調。不同於Git,像Perforce、SVN和CVS這類版本控制工具都是集中式的。
下面大概介紹下集中式版本控制工具和分布式版本控制工具的區別。
集中式
所謂集中式的版本控制,就是在一個系統中只有一個機器是服務端,其他機器全是客戶端。
以Perforce版本控制為例,在一個系統中會有一個Perforce服務器,所有的代碼以及版本信息都保存在這個服務器上。每個客戶端可以從服務器get下來一份代碼,然后在本地修改,最后submit修改的代碼。
可以看到集中式的版本控制還是有一些問題的:
- 網絡依賴性強,工作環境保持網絡連接,如果網絡斷掉了,所有的客戶端就無法工作了。
- 安全性較弱,所有的代碼以及版本信息保存在服務器中,一旦服務器掛掉了,代碼和版本控制信息就丟失了。
分布式
而在分布式版本控制系統中,沒有服務端/客戶端的概念,每台機器都是一個服務器。也就是說,在分布式本版控制系統中,每台機器都有一份代碼,並且有代碼的版本信息。
所以可以看到Git的優勢:
- 每台機器都是一台服務器,無需依賴網絡就可以幫自己的更新提交到本地服務器,支持離線工作。當有網絡環境的時候,就可以把更新推送給其他服務器。
- 安全性高,每台機器都有代碼以及版本信息的維護,所有即使某些機器掛掉了,代碼依然是安全的。
在Git中,同步更新的方式有很多種,可以把自己的更新推送給別人;也可以生成一個diff的patch,通過郵件方式把這個patch發送給別人。這些都將會在后面的文章中介紹。
建議:雖然分布式版本控制沒有服務端的概念,但一般在一個Git系統中,為了方便大家交換更新,會找一台機器作為中心服務器,這台機器的目地只是為了方便大家交換更新。即使這台中心服務器掛了,大家依然可以繼續工作,只是相互之間交換更新比較麻煩。
Git安裝
Git剛開始只能支持Linux和Unix環境,后來才慢慢的支持Windows系統。
由於我主要是在Windows環境下工作,所以下面就主要介紹Windows上面安裝Git。一般在Windows下使用Linux/Unix的工具時,需要Cygwin這樣的模擬環境。但是已經有人把模擬環境和Git打包好了,msysgit是Windows版的Git,從這里下載,然后按默認選項安裝即可。
安裝完成后,在開始菜單里找到"Git"->"Git Bash",彈出一個命令行窗口,就說明Git安裝成功!
安裝完成后,一般都會對本機的Git進行一些基本的配置。下面的命令就是給Git環境配置全局的用戶名和郵箱地址,這樣每一個從這台機器上提交的更新都會標上這些用戶信息。
git config --global user.name “your user name”
git config --global user.email “your email address”
Git命令流
在Git中支持上百個命令,每個命令又有很多的選項,所以初學者看到這些就會有一些恐懼。
其實,真正接觸過Git一段時間后,會慢慢的發現我們會經常使用的命令也就十幾二十個,掌握了這些命令之后就可以滿足我們大部分的日常工作了。
下面是我根據日常使用整理的一個Git命令流圖,包括了一些常用的命令,可以方便自己查閱。
不要被密密麻麻的箭頭嚇到,其實都是比較初級、常用的命令,后面的文章會詳細介紹圖中命令的用法以及Git中的一些基本概念。注意,圖中沒有涉及branch、patch等信息,但是后面的文章會進行介紹。
最后,附上Git命令圖的Visio的源文件,感興趣的同學也可以做一個,方便查閱,或者在這個基礎上重新定制一個。