SVN - 忽略空格的已更改文件列表

时间:2013-10-10 22:41:47

标签: svn tortoisesvn

在SVN中是否有任何方法可以列出更改的文件,而忽略只有空格更改的文件。 我已经尝试了以下内容,但没有成功:

    svn diff -x --ignore-all-space --summarize > changed_files.txt

要进行语境化,以下是该方案,作为示例: 我有一些生成的java类(.java),有时,根据某些配置(如IDE中的格式化程序),很多文件都被标记为更改,但大多数文件只有空格更改。

最好的甚至可以直接在SVN客户端上过滤这个,比如TortoiseSVN,所以我只能提交有真正变化的文件而忽略其余的文件。

2 个答案:

答案 0 :(得分:0)

  

我有一些生成的java类(.java),有时,根据某些配置(如IDE中的格式化程序),很多文件都被标记为更改,但大多数文件只有空格更改。

最佳答案是不在代码中存储生成的*.java文件。我们有几个使用WSDL文件的项目,这些文件创建了必须在以后编译的Java文件。我们只是设置我们的Ant构建,以便在需要生成这些文件时生成它们。

不完全是您正在寻找的内容,但您找到了不应该在存储库中生成文件的原因之一。

答案 1 :(得分:0)

根据 @nosid 之前的回答提出的建议,我为Windows创建了一个批处理脚本,它使用临时文件写入svn status和svn diff的结果。也许有一种更好的方法可以在不使用临时文件的情况下完成它,但这样可以正常工作:

@echo off
set dir=%1
set tempDir=%TEMP%
set svnFileStatus=%tempDir%\svn-file-status
set svnFileChanges=%tempDir%\svn-file-changes
set fileType=*.java

for /f %%a IN ('dir /b /s %dir%\%fileType%') do (
  svn status %%a > %svnFileStatus%
  call :CheckStatus %svnFileStatus% %%a
)
goto :eof

:CheckStatus
if %~z1 == 0 (
  rem skip
) else (
  svn diff -x --ignore-all-space %2 > %svnFileChanges%
  call :CheckDiff %svnFileChanges% %2
)
goto :eof

:CheckDiff
if %~z1 == 0 (
  svn changelist ignore-on-commit %2
)
goto :eof

此脚本将文件添加到ignore-on-commit更改列表中。然后可以恢复此更改列表。或者,如果您有信心,可以调整脚本以直接还原文件,但我更喜欢分两步完成。

要使用该脚本,只需将其复制到批处理文件中,然后从Windows CLI调用它,通过参数传递搜索目录,如下所示:

check-empty-changes.bat <svn-working-copy-directory>

脚本配置为搜索java文件,但您可以将其更改为使用其他文件扩展名,设置变量%fileType%属性。