在svn存储库中创建大型文件

在svn存储库中创建大型文件,svn,large-files,Svn,Large Files,作为当地的subversion沙皇,我向大家解释说,在存储库中只保留源代码和非大型文本文件,而不是大型二进制数据文件。较小的二进制文件,可能是测试的一部分 不幸的是,我和人类一起工作!有人可能会在某一天意外地犯下一个800MB的二进制绿巨人。这会降低存储库操作的速度 上次我检查时,您不能从存储库中删除文件;仅将其作为最新版本的一部分。存储库永远保存着怪物,以防有人想回忆起该日期或版本号的存储库状态 有没有办法真正删除那个怪物文件,最终得到一个大小合适的存储库?我尝试过svnadmin转储/加载功

作为当地的subversion沙皇,我向大家解释说,在存储库中只保留源代码和非大型文本文件,而不是大型二进制数据文件。较小的二进制文件,可能是测试的一部分

不幸的是,我和人类一起工作!有人可能会在某一天意外地犯下一个800MB的二进制绿巨人。这会降低存储库操作的速度

上次我检查时,您不能从存储库中删除文件;仅将其作为最新版本的一部分。存储库永远保存着怪物,以防有人想回忆起该日期或版本号的存储库状态


有没有办法真正删除那个怪物文件,最终得到一个大小合适的存储库?我尝试过svnadmin转储/加载功能,但很痛苦。

要从svn存储库中永久删除monster文件,除了使用svnadmin转储/加载之外,没有其他解决方案。()

为了防止提交大文件,可以使用钩子脚本。例如,您可以有一个脚本,每当有人试图提交到存储库时,它都会运行“预提交”。脚本可能会检查filesize或filetype,如果它包含一个或多个过大的文件或“禁止”类型的文件,则会拒绝提交

钩子脚本更典型的用途是检查(预提交)提交是否包含日志消息,或者(后提交)通过电子邮件发送提交的详细信息,或者用新提交的文件更新网站


钩子脚本是响应存储库事件()而运行的脚本。

一旦您从头部修订中删除了该文件,它不会降低您的操作速度,因为只会处理修订之间的增量。
(存储库备份当然必须处理负载)。

如果您可以在提交后立即捕获它,那么svnadmin转储/加载技术不会太痛苦。假设有人无意中犯了3849版中的gormundous-raw-image.psd。您可以这样做:

svnadmin dump /var/repos -r 1:3848 > ~/repos_dump
这将创建一个转储文件,其中包含3848修订版之前的所有内容。此时,您可以使用svnadmin create和svnadmin load重新构建存储库,而无需进行违规提交,但需要注意的是,您在存储库目录结构中所做的任何更改(钩子、符号链接、权限更改、身份验证文件等)都需要从旧目录复制过来。下面是用于完成操作的bash会话的其余部分的示例:

svnadmin create /var/repos-new
svnadmin load /var/repos-new < ~/repos_dump
cp -r /var/repos/conf /var/repos-new
cp -r /var/repos/hooks /var/repos-new
mv /var/repos{,-old} && mv /var/repos-new /var/repos
svnadmin创建/var/repos新建
svnadmin load/var/repos new<~/repos\u dump
cp-r/var/repos/conf/var/repos新建
cp-r/var/repos/hooks/var/repos新
mv/var/repos{,-old}&&mv/var/repos new/var/repos

我敢肯定,存储库的历史记录越多,这将更加痛苦,但它确实有效。

有关这方面的更多信息,请参阅博客帖子:


一定要仔细阅读评论,卡尔·福格尔在评论中对文章进行了透视:-)

我们有足够多的大文件要备份-不要了!链接页面现在是404。请编辑以保持此答案的最新状态。请将其编辑为指向网页的存档版本。不过,编辑对答案的实际反应可能是可行的。