如何从 SVN 存储库中删除所有二进制文件以减小其大小?

如何从 SVN 存储库中删除所有二进制文件以减小其大小?

我们希望通过清除所有二进制文件(通常是非面向开发的 zip 文件)来减小存储库的大小。有什么简单的方法可以删除它们吗?

答案1

我假设您想要减少[服务器上的]存储库的大小,而不仅仅是减少签出的内容。

据我所知从 svn 中永久删除某些内容的唯一方法是:

  1. 运行存储库转储
  2. 从转储中手动删除不需要的文件/对这些文件的更改
  3. 重新创建存储库

通过这种方式,您可以保留历史记录和所有元数据,但可以摆脱不需要的文件[例如二进制文件]。

答案2

很不幸的是,不行。

目前没有简单的方法可以完全从 SVN 存储库中删除文件。此功能(通常称为) 自 2001 年起就已提出要求,但尚未实施。请参阅 错误报告了解所有详细信息。

目前的解决方法是转储存储库,过滤转储,然后重新导入。这是标准书中解释,使用 Subversion 进行版本控制。

答案3

阻止人们签入您不想要的文件的最佳方法是使用预提交钩子。如果提交中的任何文件符合模式,则拒绝(即返回非 0 值)。用户在尝试提交时将收到该消息。您可以设置全局忽略,但这仅适用于客户端,如果安装了客户端而没有设置忽略,他们会很乐意尝试签入他们喜欢的任何内容。

例如(使用 Windows 批处理文件,最好使用 perl)来限制特定的文件扩展名,并向用户返回坏文件和消息:

@echo off

svnlook log -t "%2" "%1" | d:\tools\grep -c "[a-zA-z0-9]" > nul
if %ERRORLEVEL% NEQ 1 goto DISALLOWED

echo Please enter a check-in comment 1>&2
exit 1


:DISALLOWED
svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

rem ** remember to set the TruncatedExtensions registry setting to 0 ** 
rem ** or .resx will be matched as if it was .res **

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit /b 0

echo disallowed file extension >> c:\temp\precommit-bad.txt
type c:\temp\precommit-bad.txt 1>&2
exit 1

其中 ignore-matches.txt 是:

^[^D].*\.aps$
^[^D].*\.vbw$
^[^D].*\.obj$
^[^D].*\.ncb$
^[^D].*\.plg$
^[^D].*\.bsc$
^[^D].*\.ilk$
^[^D].*\.exp$
^[^D].*\.sbr$
^[^D].*\.opt$
^[^D].*\.pdb$
^[^D].*\.idb$
^[^D].*\.pch$
^[^D].*\.res$
^[^D].*\.suo$
^[^D].*\..*scc$
^[^D].*\\Debug
^[^D].*\.user$

答案4

您还可以通过忽略二进制文件来阻止用户添加二进制文件,您必须编辑 ~/.subversion/config 并查找 global-ignores。如果该行被注释掉,请删除井号。

global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS_Store ._* *.log *.bak 

所以你可以添加你想要的东西,我用它来保持我的存储库中没有 mac os 临时文件。

希望这对你有帮助。

相关内容