在學期間是否遇過作業前後修改出好多個版本,你會以什麼方式命名呢?以我的例子來說,大學作業就是與老師討論後又被退回來修改,或是與組員之間共同編輯了同份檔案,最後已經不清楚哪份才是最終版本,各版本之間的差異又是什麼?
平常我的習慣是把日期放在頭當檔名,但找截圖時實在太亂了QQ
這樣的處理方式套用在工程師上,可能會出現以下缺點:
1. 無法得知哪一份才最新檔案
2. 共同編輯需加上編輯者名字,若同時進行編輯,可能會有覆蓋的情形發生
3. 無法了解每個版本之間的差異,以及備份的原因
4. 無法追蹤修改者和修改的內容
種種因素導致工程師合作上的混亂,因此需要程式碼管理系統,而好的程式碼管理系統會大幅影響到開發效率。
Git 的版本控制系統就是為了解決這樣的問題而開發的。
💡 Git 是一種分散式版本的版本控制系統。
版本控制系統(Version Control Stystem)
記錄一個或若干個文件的狀態變化,並可以隨時切換到某個「版本」時候的狀態,以便查看特定版本修訂情況的系統。
可以清楚地紀錄每個檔案的擁有者、時間、修改異動。
集中式與分散式
集中式版控系統 (Centralize Version Control)
如:CVS、SVN 和 Perforce
需有一個專用的伺服器來管理所有版本的檔案,所有的更新都需透過此伺服器溝通。
特點:
同步 - 讓所有開發者間對檔案所做的變更都能夠同步,最終得到相同的檔案內容。
追溯 - 回到受控檔案在變化歷史中的任何一個版本,並且明白每個版本間變化的原因、以及究竟做了什麼變動。
備份 - 讓所有的受控檔案集中保管於檔案庫中,做為備份也利於備份。
優點:
可以知道專案中的其他人正在做什麼。
管理者可以掌控每個開發者的權限。
比每個用戶端只用本機的版本控制系統好管理很多。
缺點:
分散式版本控制系統(Distributed Version Control Systems,簡稱 DVCSs)
如:Git、Mercurial、Bazaar 和 Darcs
特點:
每個開發者擁各自獨立的變更集合,開發者之間可分享自己的變更集合。
可在離線環境(深山、飛機)下正常使用。
重視分支(branch)的支援
Git 是一款版本控制軟體,而 GitHub 是一個商業網站,GItHub 的本體是一個 Git 伺服器。
記錄檔案快照 Snapshot,而不是差異
每當提交 commit(註:在 Git 儲存目前專案的狀態)時,Git 會紀錄下所有目前檔案的樣子,並且參照到這次快照中。 為了講求效率,只要檔案沒有變更,Git 不會再度儲存該檔案,而是直接將上一次相同的檔案參照到這次快照中。 Git 把它的資料視為一連串的快照。
大部份的操作皆可在本地端完成
Git 能檢查完整性
在 Git 中所有的物件在儲存前都會被計算校驗碼(checksum)並以校驗碼參照物件。
Git 通常只增加資料
三種狀態
Git 專案的三個主要區域
Git 資料夾
工作目錄(working directory)
暫存區(staging area)
基本 Git 工作流程
為期 30 天的鐵人賽文章,主要都是紀錄學習筆記
,透過翻閱書籍、查找資料後整理,也許有些技術方面不夠專業,但自學的過程挺有成就感的!?
以下都會是後續文章學習過程所參考的資料: