原文地址
內容:什麼是git,爲何要使用git以及獲取和學習git的途徑。
歡迎來到github學習教程的第一課。本教程將經過一系列的實例來介紹如快速,輕鬆地使用Git。教程中會有不少屏幕截圖,但願這樣可讓你更好的學習和理解。
本節簡要介紹git的概念和爲何應該使用它
git是一個快速,開源,分佈式的版本控制系統。所以,它在(開源)和(協做編程社區)很快取代了svn。
首先,git是一個版本控制系統,用來保留工程源代碼歷史狀態的命令行工具。相似於SVN,CVS或者Perforce等工具。
當你須要獲得之前的一個保存點時,你能夠利用它來追蹤項目中的文件,而且獲得某些時間點提交的項目狀態。你能夠和合做夥伴共享這些歷史狀態,將他們的工做和你的工做進行合併,能夠對整個工程或某些文件跟歷史版本進行比較或者恢復到早期的某個版本。
由於git根本上說是一個命令行工具,因此本教程中的大部分示例都會用命令行的方式給出。教程中使用現行git版本(1.6系列)編寫示例。若是使用早期版本的話,咱們也建議您升級到1.6系列。固然,如今已經有不少git UI的工具,使得git變得更加簡單易用。
git的安裝:
下載地址
http://www.kernel.org/pub/software/scm/git/
安裝過程:
1.$ tar xzvf git-1.6.5
2.$ cd git-1.6.5
3.$ ./config --prefix=/usr/local
4.$ make
5.$ sudo make install
6.$ git --version
若是須要命令幫助的話,能夠鍵入'-help'就會顯示出
操做手冊。你也能夠鍵入'git help command'實現一樣的目的。
$ git log --help
$ git help log
git是一個開源項目,有不少年的歷史了,它的大部份內容都是用C來寫的。
你能夠獲得整個項目的源代碼,加以分析和改進。下載源程序的地址:git-scm.com/download。git許可證:GNU通用公共許可證(GNU General Public License)
git是徹底的分佈式處理,這意味着它能夠離線工做。跟VCS工具例如Perforce或者SVN徹底不一樣,Git的全部操做幾乎不須要網絡鏈接,包括歷史回顧,差別顯示和提交。
這也意味着Git比其餘的VCS工具要快不少,由於某些VCS工具對網絡的依賴會致使時間上的延遲。下面來看看'log'命令分別運行在git和SVN上的結果:
[master]$ time git log > /dev/null
real
0m0.352s
user
0m0.300s
sys
0m0.034s
$ time svn log > /dev/null
real
0m3.709s
user
0m0.482s
sys
0m0.168s
git僅用了0.3秒而SVN用了3.7秒。你會發現幾乎全部的命令都有這樣的時間差別。例如,添加知名的famfamfam出品的圖標集並提交,由於使用git能夠將【提交(commit)】和【上傳('push')網絡】這兩個步驟分開,其中【提交(commit)】git只用1/4秒,而SVN會用到45秒。
time 'git add icons; git commit -m "added icons"'
real
0m0.273s
user
0m0.032s
sys
0m0.008s
time 'svn add icons; svn commit -m "added icons"'
real
0m45.276s
user
0m15.997s
sys
0m5.503s
即便是再加上用git 提交(commit)以後再上傳(push)到網絡共享倉庫中的時間,也比SVN的耗時要少的多的多。
time git push
real
0m6.219s
user
0m0.023s
sys
0m0.011s
若是你僅僅是想提交而後繼續工做,你就會感受到時間上的巨大差別--由於git的工做流程跟之前的版本控制系統不大同樣。git的命令大部分都是即時的,不像之前,執行'svn commit'命令以後,能夠喝杯咖啡再回來繼續工做。
git比較節省空間。舉例來講,一個Django項目若是使用現行的源代碼控制系統(source control systems)來實現版本控制的話,git克隆(clone)是最小的。
$ du -d 1 -h
108M
./django-bzr
44M
./django-git
53M
./django-hg
53M
./django-svn
更神奇的是,雖然git克隆比SVN要小不少,可是git克隆包含整個項目的歷史版本---從第一次提交以後的每個文件的每一次提交的版本都囊括了。然而,SVN只包含項目的最後一個版本。
跟其餘的VCS工具不一樣,git是基於快照的。再也不是考慮將提交點存儲成補丁文件,而是在你提交項目的時候對項目作一個簡單的快照。
提交的東西包含一些元數據(提交信息(message),做者,日期等等),一個提交點指向此次提交時項目的快照。
記住這個圖對於給定情形下使用Git是很是有幫助的。
也許git最顯著的一個特色就是它的分枝模型了,由於它改變了開發者工做的基本模式。之前的VCS工具分枝的方法是對每個分枝都放到一個獨立的目錄中。而git可讓你在同一個工做目錄中切換(switch)到不一樣的分枝。建立和切換分枝幾乎是即時的(instant),並且並非全部的分枝都須要上傳到git倉庫中去共享,對於某些你更願意隱藏在本地的工做來講,git無疑提供了很大的便利。從這點上來講,git確是有其獨到之處。
摒棄了CVS只對項目開發主線建立分枝的作法,git開發者能夠隨時建立,合併,刪除多個分枝。一般對於實現某個功能或者每一個debug階段,均可以建立它的分枝,當完成以後再將其進行合併。這種模式可讓開發者體驗更加快速,簡便,安全的方式來開發項目。它鼓勵一種非線性的開發週期,它能夠說是並行的多線程模式而不是多個步驟串行的模式。