2009-11-19 70 views
12

我只是習慣了Subversion,我有一個關於版本控制的基本問題。使用Subversion,「實際」源代碼存儲在哪裏?

我在我的網絡中託管的服務器「S」上創建了我的SVN存儲庫。假設我從網絡中的另一臺計算機「A」導入代碼,文件,目錄等,它將被添加到我的服務器的SVN存儲庫中。

我從網絡中的另一臺計算機「B」進行結賬,並且可以從存儲庫中獲取所有代碼等。

假設我格式化或銷燬PC「A」,我的源代碼是否仍然可以通過在B中籤出?

如果是,當我實際瀏覽到服務器上的存儲庫文件夾時,找不到該文件夾​​的副本,只有配置,db等目錄。物理存儲在服務器S上的數據在哪裏?如果存在的話?目前,存儲庫的目錄大小顯然比源代碼文件夾小得多。

我認爲VSS以一些無法識別的數據庫格式保存實際代碼的副本,git可以選擇不需要這樣做。 SVN是否也在某處維護代碼的副本?

回答

9

當您將更改提交到存儲庫時,它們將存儲在Subversion存儲庫中的服務器S上。存儲庫實際上是由存儲在db/revs文件夾內的一系列增量構成的 - 從一個版本的存儲庫更改爲另一個版本。因此,服務器上的存儲庫不會與源代碼的結構相似。 SVN版本庫作爲一個整體版本化 - 版本庫中的任何更改都會增加版本庫。

您可以通過在任何計算機上籤出從Subversion服務器的存儲庫的乾淨副本來重新創建源代碼。

1

Subversion以某種專有格式存儲文件(不確定關閉我的頭頂)而不是目錄結構。至於它的大小,確保你實際上提交了這些文件。如果您只是簡單地添加它們,則文件不會被放入存儲庫。而且,Subversion會壓縮存儲庫中的內容。

如果所有客戶端計算機都被銷燬/格式化,只要服務器仍然可用,您將有權訪問這些文件。但是,如果您在服務器上丟失了存儲庫,除非您可以挽救其中一個簽出來創建新的存儲庫,否則您將會陷入困境。顯而易見,你會從中失去任何歷史。

長話短說,請務必定期備份服務器存儲庫。

2

svn源代碼作爲源代碼存儲在任何工作目錄中,並且源代碼+歷史記錄以壓縮格式存儲在存儲庫中。所以如果你丟失了你的倉庫,你會丟失你目前沒有簽出的任何代碼。如果您丟失了結帳副本,那麼只有本地更改會丟失,並且可以從存儲庫獲取任何其他內容。

DVCS的歷史也存儲在任何結帳。所以如果你的'主'存儲庫出現故障(假設你還有一個),你應該能夠從所有被檢出的版本中找回所有的歷史記錄。

和VSS剛剛壞了。

2

存儲庫物理存儲在SVN服務器上的一些數據庫中。一旦將其導入存儲庫,除服務器上的缺陷外,沒有任何數據會消失。工作副本的變化是無關緊要的,除非他們承諾 - 甚至在歷史中可以發現任何曾經犯過的事情。如果您定期備份存儲庫,則不會完全消失。

1

一旦你導入你的源文件,它將被存儲在服務器上的SVN倉庫中。因此,如果PC「A」被破壞,您仍然可以從SVN中檢索源代碼。 存儲庫的'db'文件夾是實際文件所在的位置。 您可以閱讀更多關於SVN存儲庫結構的信息here

0

除了其他答案:

  • 在PC B的工作副本不會自動更新。

  • 存儲庫目錄不應小於完整結帳。確保 - 通過瀏覽存儲庫本身 - 工作副本中的所有文件實際上都包含在存儲庫中。