我们希望通过清除所有二进制文件(通常是非面向开发的 zip 文件)来减小存储库的大小。有什么简单的方法可以删除它们吗?
答案1
我假设您想要减少[服务器上的]存储库的大小,而不仅仅是减少签出的内容。
据我所知从 svn 中永久删除某些内容的唯一方法是:
- 运行存储库转储
- 从转储中手动删除不需要的文件/对这些文件的更改
- 重新创建存储库
通过这种方式,您可以保留历史记录和所有元数据,但可以摆脱不需要的文件[例如二进制文件]。
答案2
答案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 临时文件。
希望这对你有帮助。