標籤:檔案 資料 ar 問題 div 代碼 工作 管理
svn與git是目前比較主流的版本控制系統,在這裡簡單記錄一下它們之間的異同。
一,從架構來說,SVN是集中式,git是分布式。 集中式的優點是代碼高度統一,缺點也很明顯就是非常依賴於中央伺服器。如果伺服器宕機或者本地 無法連網,那麼你將無法提交更新、還原、對比等,也就無法協同工作。同時SVN上的提交也並非是 每次都成功,如果有一個人在你提交的時候先提交,那麼就會提示你先更新再提交。SVN原理上只關 心檔案內容的具體差異,每次記錄有哪些檔案做了更新並且更新了哪些內容。 而分布式的git會在本地複製一個自己的版本庫,在無法連網的時候,依然能夠提交檔案,查看曆史版 本記錄等。Git中每個版本庫都是平等的。與SVN不同,Git只關心檔案資料的整體是否發生變化,Git 並不儲存檔案內容前後變化的差異資料,更像是把變化的檔案作快照後記錄在一個微型的檔案系統中 (為提高效能,沒有變化的檔案不會再次儲存)。 二,版本庫與工作區的差異 SVN的版本庫與工作區是分離的。工作區在你本地檢出的那個目錄,它是一份版本庫在某個曆史狀態 下的快照。SVN的工作區中每個目錄下都包含一個名為.svn的控制目錄(隱藏目錄)。 git的版本庫與工作區在同一個目錄下,工作區的根目錄有一個.git的子目錄。git的工作區必須要有.git 目錄,它是用來儲存中繼資料和對象資料庫的地方,並且Git的工作區下只有一個.git目錄,此外再無任何 控制目錄,如果刪除它,則破環了整個曆史,版本庫也永遠失去了。(可以在工作區之外複製一個版 本庫,並且經常把提交push到裡面,這樣就實現了資料備份。) 三,SVN採用全域版本號碼,且是連續的。Git是通過對檔案的內容或目錄的結構計算出一個雜湊值,是 40為的十六進位字串,它是全球唯一的。 四,SVN可以部分檢出,而git只能全部檢出。 五,SVN的更新可以使工作區和版本庫保持一致,git上通過git fetch(fetch將遠端資料庫的object拷貝 到本地)和git pull(pull相當於fetch+merge)來完成遠程更新任務。 六,提交與分支 SVN裡的分支就是一個子目錄,和普通的路徑沒有什麼本質的區別。而git的分支僅是一個檔案,所以 你可以在同一個工作目錄下快速的在幾個分支間切換。git的分支是完全隔離的。 SVN的提交是單線索的,它的提交鏈只有一條。Git的提交是多線索,提交鏈可以有多條。 在svn中,你無法去撤銷提交,只能在後續的提交中修正。SVN有一個特性是它的資訊從不丟失,即使 刪除了,也可以在早期版本中找到。 Git的程式碼程式庫屬於個人,允許任意修改。Git通過git reset -hard可以永遠丟棄最新的一個或幾個提交。 總結: SVN邏輯明確,符合一般人思維習慣;易於管理,集中式伺服器更能保證安全性;代碼一致性非常 高;適合開發人數不多的項目。缺點是,伺服器壓力太大,資料庫容量暴增;如果不能串連到伺服器 上基本不可以工作。 Git適合分布式開發,強調個體;公用伺服器壓力和資料量都不會太大;離線工作;任意兩個開發人員之 間很容易解決問題。缺點是,學習周期較長,代碼保密性差。