Git是一個分布式的版本控制系統,最初由Linus Torvalds編寫,作者把他描述為一個“傻瓜式的版本管理系統”,用作Linux內核代碼的管理。在推出后,Git在其它項目中也取得了很大成功,尤其是在Ruby社區中。目前,包括Rubinius和Merb在內的很多知名項目都使用了Git。Git同樣可以被諸如Capistrano和Vlad the Deployer這樣的部署工具所使用。使用GIT系統,不需要像SVN那樣搭建一臺SVN服務器來存放代碼庫。
一、為什么選擇Git
對于流行的軟件版本開源管理軟件,元老級的CVS、后來新秀的SVN,今天我在CHIP.CN Dowload中看到了一篇文章:《2008年度最佳開源軟件大獎》(http://download.chip.eu/cn/standardbeitrag_cn_3640079.html)。其中提到了GIT版本管理系統。
我很奇怪,為什么SVN沒有入圍并獲獎呢?當初,我在從CVS轉移到SVN時就曾經就SVN的一系列優勢進行過一些粗淺的學習。SVN在版本庫的管理上較CVS有明顯的優勢。那么與SVN相比,GIT的優勢又在哪里呢?
經過強大的Google,我從網上找到了這些內容:
From 《Git入門教程》:(http://hi.baidu.com/eehuang/blog/item/37af8d54242d6351564e00b5.html)
1. 傻瓜都會的初始化,git init, git commit -a, 就完了。對于隨便寫兩行代碼就要放到代碼管理工具里的人來說,再合適不過。也可以拿git做備份系統,或者同步兩臺機器的文檔,都很方便。
2. 絕大部分操作在本地完成,不用和集中的代碼管理服務器交互,終于可以隨時隨地大膽地check in代碼了。 只有最終完成的版本才需要向一個中心的集中的代碼管理服務器提交。
3. 每次提交都會對所有代碼創建一個唯一的commit id。不像CVS那樣都是對單個文件分別進行版本的更改。所以你可以一次性將某次提交前的所有代碼check出來,而不用考慮到底提交過那些文件。(其實SVN也可以做到這點)
4. branch管理容易多了,無論是建立新的branch,還是在branch之間切換都一條命令完成,不需要建立多余的目錄。
5. branch之間merge時,不僅代碼會merge在一起,check in歷史也會保留,這點非常重要。
From gitHost.cn
1、更方便的 Merge
分布式管理必然導致大量的 Branch 和 Merge 操作。因此分布式版本控制系統都特別注意這方面。在傳統的 CVS 里面制作 Branch 和 Merge 簡直就是噩夢,Subversion 作為一個用于替代 CVS 的系統,專門改進了 Branch 操作。然而似乎人們沒有注意到,Branch 是輕松了,可是 Merge 呢?如果不能很方便地 Merge 回來,做 Branch 仍然是噩夢。事實上,我就經歷過在開發團隊里面由于隊友操作不對而在 Merge 的時候把我的許多代碼都覆蓋掉了。當時正是使用的 subversion 。雖然源代碼仍然在歷史里面,但是要去一個一個地找出被覆蓋掉的文件并恢復過來確實是一件很難忘的事情。
2、更方便的管理
傳統的版本控制系統使用中央倉庫,一些倉庫相關的管理就只能在倉庫上進行。賦予開發團隊每一個人中央倉庫的管理權限是非常不好的。但是有時候確實會比較不方便的地方。
3、更健壯的系統
分布式系統一般情況下總是比單服務端的系統要健壯,因為但服務端一旦服務器掛掉了整個系統就不能運行了。然而分布式系統通常不會因為一兩個節點而受到影響。
4、對網絡的依賴性更低
雖然現在網絡非常普及,但是并不是隨時隨地都有高速網絡,甚至有時候根本沒有網絡可以訪問。低速的網絡會讓人心情煩躁,有時候就呆呆地盯著屏幕上的 commit 進度,什么事情也干不了。而沒有網絡連接更是致命的:你無法 commit !這表示你進行任何改動以前都必須小心翼翼,否則你可能再也找不會你曾經寫的一些代碼了。
5、更少的“倉庫污染”
有時候你要做一個模塊,它不是太大,所以沒有必要為它新建一個 branch , 但是它又不是那么小,不可能一次提交就做好。于是便會提交一些不完整的代碼到倉庫,有時候會導致整個程序無法運行,嚴重影響團隊里其他人的開發。大多數人 在這種情況下的解決辦法都是寫完之后再提交。但是作為習慣了版本控制的人來說,進行不計后果的大幅修改是經常的事情,到后來突然發現自己先前的代碼沒有提 交,就后悔莫及了。如果是分布式系統的話就不會存在這樣的問題,因為本地倉庫的修改不會影響到別人的倉庫。當你完成并測試以后,就可以在郵件列表里面說: 我已經把這個模塊做好了。然后感興趣的人就可以從你這里 pull 你的成果了。
雖然網上各種對Git的譽美之詞決不止于此,但是在Git的主站上,還是盡可能客觀的對Git和Subversion進行了一番比較。(GitSvnComparsion :http://git.or.cz/gitwiki/GitSvnComparsion)。另外,Subversion目前通過SVK也已經提供了一定程度上的源代碼庫分布式的管理能力。能夠實現源代碼的離線提交等功能。
二、在Windows上的使用Git
不得不說,Git是為Linux而生的。(廢話,Git的最初創建人就是Linux的創始人啊)。在Linux環境下,要使用Git,與任何Linux中的命令行工具沒有什么區別。甚至在擊鍵數上還有明顯的優勢。在Windows上要使用Git在目前看來只有兩種方法:使用Cygwin(一個在Windows上運行的Linux環境)或者使用msysgit(http://code.google.com/p/msysgit/)。Cygwin和msysgit的使用方法類似。Cygwin具有大量Linux的功能,如果只是想使用Git功能的話msysgit還是最簡單和快速的方法。下面的介紹將以msysgit為主進行。
為了能夠具備通過互聯網實現與別人協作開發的能力。對于項目,需要一個公開的源代碼托管服務。好在,現在已經有不少可以供我們選擇的。尤其是githost,更是一個中文的源代碼托管服務提供方。從目前看來,在Githost上落戶的項目還很少,貌似是一個新近誕生的服務提供方。如果項目對服務提供的穩定性有比較高的要求的話,還是選擇較老的git源代碼托管服務比較好吧。
如果是在局域網內工作的小組,要使用Git做源代碼管理,那就更簡單了,大家安裝好自己的Git,并指定一個人負責對Git版本庫進行管理就好了。
(一) GitHub簡介
GitHub是使用Ruby開發的,具有清爽的界面。GitHub提供免費的源代碼庫托管,同時也提供付費的托管服務。通過付費私有庫托管服務在財務上支持免費部分的持續運營。
GitHub提供了一套獨特的代碼庫管理界面功能,并提供項目Wiki的能力。
GitHub提供了一系列的指南,也可以到這里去看看:http://github.com/guides/home
(二) 在Windows系統上安裝Git
到msysgit的老家下載安裝程序。http://code.google.com/p/msysgit/
選擇下載“** Full installer if you want to use official Git 1.5.6.1 **”對應的Git-1.5.6.1-preview20080701.exe。實際上,總可以選擇最新的Git版本,以取得更好的使用效果。
安裝的過程很簡單,基本上可以使用默認設置。只是在設置路徑的時候要注意一下,為了避免與Windows路徑導致的意外情況,還是使用“Use Git Bash Only”比較安全。
Msysgit有命令行和圖形UI兩種使用方式。根據你的喜好選擇吧。要說的是,圖形UI可能不能完成所有的工作,因此在某些情況下(例如創建SSH Key),命令行還是必不可少的。
Msysgit的Bash命令行對中文的支持不好。所有的中文字符都顯示成了“?”。因此,為了避免麻煩,最好避免使用中文的文件名、目錄名和用戶名等。不知道現階段Cygwin對中文的支持如何,隨后再試試看吧。
(三) 設定GitHub
要使用GitHub首先需要創建SSH Key。SSH將用來加密本機與遠端服務器之間的通信。同時也是識別你對代碼所做的變更的方法。SSH Key可以使用Git命令行來產生。如果你已經有一個SSH Key了,那么在這里也可以直接使用。
要使用Git創建SSH Key 首先需要打開Git Bash 命令行。
輸入命令:
ssh-keygen -C "username@email.com" -t rsa
說明:username@email.com 需要更換成你自己的Email地址
程序將提出一些問題,接受文件默認存放位置,當要求輸入pass phrase時,如果本機安全沒有問題,也可以不輸入。找到當時制定的文件存儲位置中id_rsa.pub文件。這就是在GitHub上申請帳戶時需要使用的SSH公鑰文件。
在github.com的register中選擇Free account,在后續的界面中按照要求填入相應的內容即可完成注冊。很簡單的。
關于Git后續如何使用,還是在另外的文檔中說明吧。
三、關于Git的一些聯結
1、 建立Git遠程服務器:
目前貌似還沒有在Windows上建立Git服務器的。Linux在開源上還是強大??!
l Hosting Git repositories, The Easy (and Secure) Way
http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way
l Remote Git Repos on Ubuntu: The Right Way
http://blog.drewolson.org/2008/05/remote-git-repos-on-ubuntu-right-way.html
l Installing Git on a server (Ubuntu or Debian)
http://www.urbanpuddle.com/articles/2008/07/11/installing-git-on-a-server-ubuntu-or-debian
2、 基于Git的源代碼托管
l 中文的Git源代碼托管,基于gitorious構建:http://www.githost.cn/projects
l Gitorious
Gitorious is another free hosting site with a custom web interface, supporting multiple repositories per project, local installations and with open source code:
http://gitorious.org/
l repo.or.cz
repo.or.cz is the oldest hosting site, accommodating many hundreds of projects, with open-sourced infrastructure and aimed at open source software. It provides full push features as well as simple mirroring mode and gitweb interface with various enhancements. :http://repo.or.cz/
l GitHub
GitHub provides both free hosting for smaller projects and paid options for private hosting and large-sized projects. It uses a custom web interface including a wiki hosting and puts emphasis on social networking of project developers:http://github.com/
3、 關于Git的有用的聯結:
l Git的老家:http://git.or.cz/
l Git User's Manual (for version 1.5.3 or newer) :
http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.2/user-manual.html
l Git - SVN Crash Course:
http://git.or.cz/course/svn.html
l Everyday GIT With 20 Commands Or So:
http://www.kernel.org/pub/software/scm/git/docs/everyday.html
四、參考文檔:
l Getting Started with Git and GitHub on Windows:
http://kylecordes.com/2008/04/30/git-windows-go/
l 中文教程: http://www.b***/documents/gittutorcn.htm
l 簡介: http://linuxtoy.org/archives/git.html
l 英文教程:http://www.kernel.org/pub/software/scm/git/docs/tutorial.html
l GitHub:http://github.com