原文地址
內容:什麼是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
real0m0.352s
user0m0.300s
sys0m0.034s
$ time svn log > /dev/null
real0m3.709s
user0m0.482s
sys0m0.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"'
real0m0.273s
user0m0.032s
sys0m0.008s
time 'svn add icons; svn commit -m "added icons"'
real 0m45.276s
user0m15.997s
sys0m5.503s
即使是再加上用git 提交(commit)之後再上傳(push)到網絡共享倉庫中的時間,也比SVN的耗時要少的多的多。
time git push
real0m6.219s
user0m0.023s
sys0m0.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階段,都可以創建它的分枝,當完成之後再將其進行合併。這種模式可以讓開發者體驗更加快速,簡便,安全的方式來開發項目。它鼓勵一種非線性的開發週期,它可以說是並行的多線程模式而不是多個步驟串行的模式。