1. 程式人生 > >原始碼管理工具 一一 Git-介紹與SVN的對比

原始碼管理工具 一一 Git-介紹與SVN的對比

一、Git簡介和與SVN的簡單對比
1. 什麼是git?
git是一款開源的分散式版本控制工具
在世界上所有的分散式版本控制工具中,git是最快、最簡單、最流行
git的起源
作者是Linux之父:Linus Benedict Torvalds
當初開發git僅僅是為了輔助Linux核心的開發(管理原始碼)
git的現狀
在國外已經非常普及,國內慢慢普及
越來越多的開源專案已經轉移到git

2. 其他的版本控制工具
CVS
最早的開源、免費的集中式版本控制工具
自身設計有問題,會造成提交檔案不完整,版本庫莫名損壞的情況

SVN
修正了CVS的一些穩定性問題,是目前使用最多的集中式版本庫控制器工具

ClearCase
收費的集中式版本控制工具,安裝大,執行慢

VSS
微軟的集中式版本控制工具,整合在Visual Studio中

1.集中式

 ComputerA想要伺服器最新的程式碼直接通過checkout向伺服器下載
    ComputerA在本地修改程式碼後,直接提交到伺服器
    ComputerB想要伺服器最新的程式碼直接通過checkout向伺服器下載
    ComputerB在本地修改程式碼後,直接提交到伺服器
    所有的內容統一交給伺服器來進行管理

2.分散式
    
伺服器本地有個程式碼倉庫,從伺服器更新程式碼,上傳程式碼
    ComputerA想要伺服器最新的程式碼由原生代碼倉庫將伺服器的程式碼下載下來,再通過原生代碼倉庫的專案下載到ComputerA
    ComputerA在本地修改完程式碼後先提交到本地的程式碼倉庫,再由本地的程式碼倉庫提交到伺服器
    ComputerB操作與ComputerA相似
    程式碼的提交與更新首先會通過原生代碼倉庫,原生代碼倉庫再通過伺服器,並不是直接交給伺服器來進行管理


3. Git和SVN的簡單對比
速度:
在很多情況下,git的速度遠遠比SVN塊
結構:
SVN是集中式管理,git是分散式管理
其他:
SVN使用分支比較笨拙,git可以輕鬆擁有無限個分支
SVN必須聯網才能工作,git支援本地版本控制工作
舊版本的SVN會在每一個目錄置放一個.svn, git只會在根目錄下擁有一個.git

分散式和集中式的最大區別在於:
    在分散式下開發者可以本地提交,每個開發者機器上都有一個伺服器的資料庫

集中式和分散式的工作圖:

分散式:


git的工作流程

    上圖以類區分總共有兩類角色,一類共享版本庫(可以稱之為伺服器),一類是開發人員
    開發人員A想要共享版本庫的程式碼,通過clone命令向伺服器下載,將伺服器完整的程式碼下載到本地版本庫中,之後本地版本庫將程式碼自動下載到本地
    開發人員A在本地修改後,提交程式碼,通過commit命令先提交到本地版本庫,之後通過push命令將本地版本庫的程式碼提交到共享版本庫
    開發人員B想要共享版本庫的程式碼,通過clone命令向伺服器下載,將伺服器完整的程式碼下載到本地版本庫中,之後本地版本庫將程式碼自動下載到本地
    開發人員B在本地修改後,提交程式碼,通過commit命令先提交到本地版本庫,之後通過push命令將本地版本庫的程式碼提交到共享版本庫
    開發人員A想要伺服器最新的程式碼,通過pull命令現將伺服器最新的程式碼更新到本地版本庫,之後本地版本庫將程式碼自動更新到本地
4. Git的工作原理
如果想了解git的工作原理,有幾個核心概念必須知道
工作區(Working Directory):倉庫資料夾裡除.git目錄以外的內容(此時main.m在工作區,是紅色)


版本庫(Repository):.git目錄,用於儲存記錄版本資訊
暫緩區(stage)git add main.m 將main.m檔案從工作區新增到暫緩區. (檔案是綠色)

git commit -m "modify main.m" 將暫緩區中的main.m 提交到分支(本地版本庫)

分支(master):git自動建立的第一個分支. git push origin master 將本地版本庫的main.m 推送到伺服器(共享版本庫)
HEAD指標:用於指向當前分支

git add和git commit的原理
git add :把檔案修改或者新新增的檔案新增到暫存區
git commit :把暫存區的所有內容提交到本地版本庫(分支)
git push : 把本地版本庫中的內容新增到伺服器(共享版本庫)