1. Introduction
Git
是Linux Torvalds
为了帮助管理Linux®
内核开发而开发的一个开放源码的版本控制软件。在軟體開發過程中,程式碼的保存一直是不容忽視的工作事項,而這常受到許多不可抗力因素影響,像是硬碟故障、檔案被誤刪或覆蓋,而造成事後甚高的補救成本。
人有失足,馬有亂蹄,因為程式總會寫錯,需求規畫也可能隨時變更內容,所以,系統總是會需要回復到先前開發的版本。
然而版本控管當然不只是程式碼備份,它可以詳盡記錄程式碼內容異動歷程,是這種工具最基本的功能,以最少的檔案空間記錄最完整的版本資訊,讓開發者可以實際找出所想要的程式碼版本內容。
軟體開發通常需要多人協同運作,此時就會團隊運作必須解決同一份程式碼同時被多人編輯的問題。版本控管工具提供了成熟良好的機制,發出警訊提醒管理者及相關開發人員及早處理,以避免未預計的狀況不斷發生而延誤開發時程。
程式碼在開發過程中,有版本控制(
Version Control
)和協同合作的需求,因此需要程式碼管理的工具,Git
就是其中一個選項。
Git
本身是個分散式版本控制系統,由Linux
創建者Linus Torvalds
於2005年開始打造,它是基於P2P
(Peer-To-Peer)架構開發,每個開發者手上的檔案庫
(Repository
)地位相等且可獨立運作。當版本控制系統開始出現時,開發團隊中開發者之間合作的方式,是共用同一個「
檔案庫
(Repository
)」,無論這個檔案庫是在同一部工作站,或可透過網路存取的檔案系統上的本地端檔案庫,還是透過一個特定的通訊協定可以存取的遠端檔案庫,所有的成員都是共同存取同一份檔案庫。這種方式,就被稱為集中式
(Centralized
)的版本控制系統。分散式的版本控制系統和集中式的版本控制系統,最大的差別在於,分散式的版本控制系統的檔案庫允許不只一份,事實上,每個開發者都可以在自己的一部或多部開發機器上建立檔案庫。
GitHub
是存放Git
程式碼管理的資料庫。GitHub
上還加入社群的概念,跟臉書一樣,你可以跟隨其他開發朋友,或觀看其他開發專案進度。對開發人員而言,版本控制與原始碼編譯器與編譯器一樣,就像是吃飯與呼吸,是日常開發生活的一部分。 版本控制是管理一組檔案的許多版本的流程。它們通常是軟體系統的原始檔案(所以它通常被稱為原始碼控制),但是它也可以是簡單的文件樹改版,或任何其他你想要在檔案系統中儲存的東西。
這幾年來出現許多不同的
VCS
(Version Control Systems
,版本控制系統
)系統,從Unix
的rcs
指令開始(1980年代初),經歷集中式的CVS
(在1990年代流行),它的現代化兄弟Subversion
(2000年代當道),最後進入現代離散系統的世界,如Git
與Mercurial
(現在統治2010年代)。有些工具是商業性的,許多其他的都是開放原始碼的。它們的認證、價格、易用性、支援平台、成熟度、可擴充性及功能各有不同。 最重要的差異是運作的模式。已成為歷史的集中系統透過一個中央伺服器來管理存放所有被控制版本的檔案的存儲庫,並用它來掌控所有通訊。這是一個簡單的模式,但任何操作都需要存取伺服器。最近的VCS
是離散模式,一種端對端的方式,讓每一台電腦都可以儲存它自己的存儲庫副本。這可產生更多令人印象深刻的工作流,並且讓你可以與存儲庫互動,就算你沒有連結網路。使用版本控制。它不是一個選項,或是最好可以擁有的工具。它是開發的骨幹。如果沒有它,你的工作會很危險。
對開發新手而言,想要善用
GitHub
平臺提供的Git
版本控管服務,上手不難,但隨著開發專案開始衍生分支版本後,不少新手往往很容易發生越管版本越混亂的窘況。新手最大的迷思是「直接將集中式版本控制軟體的觀念套用在Git
上。」,新手要先了解分散式版本控制系統的運作原理,否則「即便有再好的工具,如果觀念不清楚也沒有用。」在
Git
工作流程中,使用者先從儲存庫下載某一版本到工作目錄,檔案修改完後,把檔案快照新增到暫存區域,執行提交後檔案就永久存到儲存庫內。
Git
是為Linux
開發流程量身打造的版本控制系統,為了有效處理龐大專案而生。甚至刻意要跟CVS
這類集中式版本控制軟體的設計相反,改採分散式架構。儘管Git
物件檔案的版本編號不像CVS
那樣是遞增的數字,反而是恐怖的40字元HEX編碼,但Linus Torvalds
認為,分散式設計的Git
是必要的改進,而且開發者一旦用過就無法回頭用傳統工具。因為Git
備份簡單又可靠,更不用擔心測試儲存庫會影響到主要儲存庫的程式碼。
GitHub
:IT人必學開發神器
Linus Torvalds
為Linux
開發量身打造的分散式版本控制軟體Git
,催生了全球最大開源專案平臺GitHub
,也創造開源經濟的新商業模式GitHub
顧名思義,是一個提供Git
版本控管服務的平臺。Git
這套出自Linux
之父Linus Torvalds
之手的版本控制系統,無疑是GitHub
大受歡迎的關鍵之一。源代码管理
(SCM
)