我只是习惯了Subversion,而且我对版本控制有一个基本的问题。
我在我的网络中托管的服务器“S”上创建了我的SVN存储库。假设我从网络中的另一台计算机“A”“导入”代码,文件,目录等,它将被添加到我的服务器的SVN存储库中。
我从网络中的另一台计算机“B”结账,我可以从存储库中获取所有代码,等等。
假设我格式化或销毁PC“A”,我的源代码是否仍可通过B中的结账获得?
如果是,当我实际浏览到服务器上的我的存储库文件夹时,我找不到该文件夹的副本,只找到配置,db等目录。物理存储在服务器S上的数据在哪里,如果存在的话?目前,存储库的目录大小明显小于源代码文件夹。
我认为VSS会以某种无法识别的数据库格式保存实际代码的副本,git可以选择不要这样做。 SVN是否还在某处保留了代码的副本?
答案 0 :(得分:9)
当您对存储库提交更改时,它们将存储在您的subversion存储库中的服务器S上。存储库实际上是由存储在db/revs
文件夹中的一系列增量构成的 - 从一个版本的存储库更改为下一个版本。因此,服务器上的存储库将不会类似于源代码的结构。 SVN存储库作为一个整体进行版本化 - 存储库中的任何更改都会增加存储库的版本。
您可以通过从subversion服务器检出存储库的干净副本到任何计算机来重新创建源代码。
答案 1 :(得分:2)
对于svn,源代码作为源代码存储在任何工作目录中,源代码+历史以压缩形式存储在存储库中。因此,如果您丢失了存储库,您将丢失任何当前未检出的代码。如果您丢失了结帐副本,则只会丢失本地更改,并且可以从存储库中获取任何其他内容。
对于DVCS,历史记录也存储在任何结账中。因此,如果您的“主要”存储库出现故障(假设您甚至有一个存储库),您应该能够从人们检出的版本中恢复所有历史记录。
和VSS刚刚破裂。
答案 2 :(得分:2)
存储库物理存储在SVN服务器上的某些数据库 中。一旦将其导入存储库,除服务器上的缺陷外,任何数据都不会消失。工作副本的变化是无关紧要的,除非它们已经提交 - 即使这样,所有提交的内容都可以在历史中找到。如果您定期备份存储库,那么任何事情都不会完全消失。
答案 3 :(得分:1)
Subversion以某种专有格式(不确定在我的头脑中)存储文件,而不是在目录结构中。至于它的大小,请确保您实际提交文件。如果只是添加它们,则文件不会放入存储库。此外,Subversion会压缩存储库中的内容。
如果所有客户端计算机都被销毁/格式化,只要服务器仍然可用,您就可以访问这些文件。如果您丢失了服务器上的存储库,除非您可以挽救其中一个签出以创建新的存储库,否则您将被清除。显然,你会失去任何历史。
简而言之,请务必定期备份服务器存储库。
答案 4 :(得分:1)
导入源文件后,它将存储在服务器上的SVN存储库中。因此,如果PC“A”被破坏,您仍然可以从SVN检索源。 存储库的“db”文件夹是实际文件所在的位置。 您可以阅读有关SVN存储库结构here的更多信息。
答案 5 :(得分:0)
除了其他答案:
PC B上的工作副本不会自动更新。
存储库目录不应小于完整的结帐。确保 - 通过浏览存储库本身 - 工作副本中的所有文件实际上都包含在存储库中。