从@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%。