1

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

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

为了上下文化,这里是一个场景,例如:我有一些生成的 java 类 (.java),有时,根据某些配置(如 IDE 中的格式化程序),很多文件被标记为更改,尽管大多数文件其中只有空格变化。

最好的甚至可以直接在 SVN 客户端(例如 TortoiseSVN)上进行过滤,这样我就可以只提交具有实际更改的文件而忽略其余的文件。

4

2 回答 2

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

此脚本将文件添加到提交时忽略更改列表。然后可以恢复此更改列表。或者,如果您有信心,可以调整脚本以直接还原文件,但我更喜欢分两步进行。

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

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

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

于 2013-10-12T10:19:39.003 回答
0

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

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

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

于 2013-10-11T18:29:27.070 回答