在日常開發工作中,程式設計師會頻繁與版本控制工具打交道來管理自己的**。目前用到相對比較廣泛的版本控制管理工具應該是 svn 和 git 。這裡主要針對這兩者的區別做個簡單的概述。
svn:是乙個遠端集中式的版本控制系統,與 rcs、cvs 比較來說,svn 採用了分支管理系統,其設計的目的是為了取代 cvs 。
git:是乙個開源的分布式版本控制系統,可以有效、高速地處理從小到非常大的專案版本管理。
git 是將內容按照元資料的方式進行儲存(類似於key/value
資料庫的形式,可以理解成map)。
將內容丟到 git 的類資料庫中(也就是將檔案中的內容取出來存到資料庫當中),其會返回乙個key
值,這個key
值相對於內容來說是唯一的,也就是說當插入重複的內容時所返回的key
值是一樣的。
git 基於key
值獲取指定內容,將每個檔案的版本中的內容都儲存在其資料庫當中,當要進行版本回滾的時候,就通過其中的乙個key
值將其取回並做替換。
svn 則是按照原始檔的形式進行儲存。
換句話來說也就是對檔案進行拷貝。
如果需要回滾的話,只需要將其對應版本的檔案做替換即可。
幾乎所有的版本管理系統都是將檔案的元資訊隱藏在類似.svn
、.cvs
等資料夾當中。而.git
資料夾則可以說是本地機器上的乙個轉殖版的版本倉庫,它包含了遠端中心版本倉庫上的所有東西,例如標籤,分支,版本記錄等等。所以將.git
資料夾的體積大小與.svn
進行比較,會發現兩者的差距很大。
svn 的使用過程相對比較簡單,針對所修改的內容提交只需要進行commit
操作就夠了,檢出也只需要checkout
。
如圖所示,無論是員工a還是員工b,在修改完**後只需要commit
將修改的內容提交至遠端倉庫即可。員工c只需要通過checkout
將內容從遠端倉庫檢出至本地。
git 就與 svn 完全不同。
如圖,員工a將修改的內容提交至遠端倉庫需要經過以下幾個步驟:
同樣,員工b從遠端倉庫檢出**至本地需要經過以下幾個步驟:
總的來看,從本地將新增或者修改的檔案推送至遠端倉庫的過程當中,svn 只需要commit
乙個步驟就夠了,而 git 則需要經過add
、commit
、push
三個步驟。
從遠端倉庫檢出**至本地工作空間的過程當中,svn 只需要checkout
乙個步驟就夠了,而 git 則需要經過clone
、checkout
。
git 是乙個分布式的版本管理系統,而 svn 是乙個遠端集中式的管理系統。
在這裡我們的 svn 只支援乙個遠端倉庫,如果說我們的遠端 svn 倉庫掛掉了,那麼本地專案就不能夠進行提交、分支的切換等版本相關的任何操作。這也是集中式管理系統所存在的乙個缺陷。
本地 git 倉庫是跟著專案走的,而不是跟著本機走的。也就是說乙個專案內包含乙個完整的 git 倉庫,多個專案會包含多個 git 倉庫。
遠端 git 倉庫所能做的事情,本地 git 倉庫也能做,例如:**的提交、版本的回滾、分支的切換等操作。
當然本地 git 倉庫也直接能和我們的遠端 git 倉庫進行關聯,git 提供四種通訊協議(local
、ssh
、http
、git
)來支援與遠端倉庫的連線。
git 還支援多個遠端倉庫,即乙個本地 git 倉庫能夠連線多個遠端 git 倉庫。
所以即便是掛了乙個遠端 git 倉庫,我們仍然可以切換其他的遠端 git 倉庫進行提交、分支的切換等版本相關的任何操作。就算是所有遠端倉庫都掛了,我們仍然能在本地 git 倉庫進行相應的操作。
Git和SVN的區別
如果你之前一直在使用svn來進行版本控制的操作,如果你還沒有機會試試git,我想你現在應該先了解一下它。git不僅僅是乙個版本控制系統,它也是乙個內容管理系統 cms 工作管理系統等。如果你是乙個具有使用svn背景的人,你需要做一定的思想轉換,來適應git提供的一些概念和特徵。所以,這篇文章的主要目...
SVN和GIT的區別
1.git是分布式的,svn不是 這是git和其它非分布式的版本控制系統,例如svn,cvs等,最核心的區別。如果你能理解這個概念,那麼你就已經上手一半了。需要做一點宣告,git並不是目前第乙個或唯一的分布式版本控制系統。還有一些系統,例如bitkeeper,mercurial等,也是執行在分布式模...
Git和SVN的區別
git和svn都是 管理系統,總結了下兩者的區別 git是分布式的,每個人在本地都可以一次或多次提交 到自己的庫,在合適時間在提交到主庫。而svn是集中式的,一提交就是到主庫 git分支可以只自己見 未push前 svn新建的分支所有人可見 git分布式可以離線開發,svn不行,當 伺服器故障時,s...