2011-08-26 59 views
3

當我學習Git時,我知道像SVN這樣的VCS系統通常會將更改存儲到基本版本的文件中。因此,作爲一個合理的推論,如果我想檢查文件A的版本4,SVN會在提交我想要的版本之前,將所有更改集合提交到版本4之前即時修補基本版本文件?VCS如SVN如何存儲文件?

下面的圖片可能會有所幫助。 Traditional VCS like SVN

總之,只有基本版本文件存儲靜態,所有其他版本都與基本文件和必要的變更集生成動態

對不對?

謝謝。

回答

3

從Subversion設計文檔:

像許多其他版本控制系統,Subversion把變化 差異。它不會完整地複製節點;相反,它 作爲一個完整的文本存儲的最新修訂和以前的修訂爲 連續的反向差異(單詞「diff」在這裏鬆散地使用 - 文件,它意味着vdeltas,目錄,它意味着一種格式 表示對目錄的更改)。

重要的一點是,該最新修訂版本是鹼和(反向)的diff是從向後存儲。

http://svn.apache.org/repos/asf/subversion/trunk/notes/subversion-design.html#server.fs.struct

您也可以看看鏈接查看提交如何獲取存儲在庫中。

+0

感謝manojlds爲你的乾淨鏡頭。 – smwikipedia

+0

過去在BDB文件系統中使用了向後存儲模型。更新的版本切換到正向存儲以允許其他一些存儲優化,這些存儲優化在向後存儲時證明非常困難。 –

+0

在Git中,情況並非如此。每個版本的完整快照都與元數據一起存儲(如更改差異)。這種方式可以實現分佈式VCS。因此SVN在空間複雜度方面更加優化,但由於需要沿着修訂歷史記錄計算更改集,因此在版本解析中缺乏時間複雜性。 –

0

首先,您不能在Subversion中籤出單個文件。你可以簽出的最小部分是一個目錄,但不會改變任何內容。

有關SVN如何工作以及如何存儲的最佳文檔可以閱讀here

+0

感謝您的回覆。我沒有使用SVN很多。所以我希望有人能夠給我一個確認我的猜測。 – smwikipedia

2

關於Subversion如何存儲它的文件有很多文檔,但事實是,你真的不應該知道。否則,您可能會試圖在存儲庫管理器的後面進行這些更改。

存儲庫後端的結構是一個熱點問題。有些團體認爲,這應該有充分的文件記錄,並在出現問題時能夠很好地理解,並且用戶可以修復它們。其他人則認爲,結構永遠不應該被觸及,最大的問題通常來自最終用戶,他們認爲他們知道自己在做什麼,挖掘存儲庫並摧毀一切。

Subversion版本庫實際上有兩種格式。一個使用FSFS文件格式(現在大多數人使用),但最初,Subversion使用Berkeley DB(BDB)來存儲文件。 (它仍然可以,但你現在必須指定它)。將來,Subversion可能會切換到SQLite或MySQL作爲其存儲庫後端。

這將允許Subversion開發人員從存儲庫結構中分離出執行代碼。這將使添加新功能變得更加容易。例如,一個消滅命令有很多的色彩和哭泣。不幸的是,從Subversion開發人員告訴我的內容來看,在當前的FSFS文件結構中完成是不可能的。基於SQL的存儲庫會讓這變得更容易。

+0

感謝您的背景資料。 – smwikipedia