2011-08-13 42 views
1

为了更好地理解SVN如何处理二进制文件,我尝试了一个小实验。我希望能够发现SVN会在不同位置识别相同的二进制文件,而不会创建同一文件的多个副本。我发现我提出的问题比答案多。我希望有一位SVN专家能帮助我理解这一点。相对于提交的二进制文件的SVN存储库大小

注1:MyTest.dll是2108 KB

注2:我知道SVN做一些压缩在幕后,但仍不能解释的结果。

这里的实验:

1)创建了一个新的回购

2.)我添加MyTest.dll到中继线&致力于 - >回购大小= 66ķ

3.)加入/ 1 /和/1/MyTest.dll &致力于 - >回购大小= 735ķ

4.)加入/ 2 /和/2/MyTest.dll &致力于 - >回购大小= 2 mb个

5.)添加/ 3 /和/3/MyTest.dll &致力于 - >回购大小= 2.1 MB

6.)添加/ 4 /和/4/MyTest.dll &致力于 - >回购大小= 3.4 mb

任何人都可以在那里解释为什么每个提交的回购大小的变化显示为相对于提交的实际内容如此随机?

谢谢!

回答

0

因为每次提交的所有更改都会保存下来,所以您随时可以随时恢复旧文件,所以Repo的增长量相当大(即使您只处理少量文件)。 SVN和相关工具有很多信息来管理文件的内务管理和缓存/索引以及占用空间。根据每次提交的文件数量,每次提交通常会增加回购的大小,因为这些提交“补丁”文件是在内部创建的,以便SVN知道允许恢复功能工作的所有更改回到实体1.很难解释实际上大部分剩余空间正在被填充的地方,因为大部分时间我都会使用git,git往往会有更小的repo,但它可能只是内部的SVN使用它的功能。我希望这有助于清除一些事情。

+0

感谢您的回复。毫无疑问,SVN在幕后做了很多工作来支持所有的版本功能。每次提交时存储库的增长与提交的实际内容相比似乎有点随意。 –

1

不,它不会搜索整个存储库(可能是千兆字节)来查看文件是否已被提交。

只有当您在存储库中的文件svn copy时,才会引入新副本。

+0

感谢您的回答。听起来像SVN复制将做我所需要的。 –