2013-10-10 33 views
1

SVN中是否有任何方法來列出已更改的文件,而忽略僅更改了空格的文件。 我已經嘗試過,沒有成功,執行以下操作:SVN - 忽略空格的已更改文件列表

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

的背景情況,這裏是場景中,作爲一個例子: 我有生成並有時一些Java類(的.java),這取決於一些配置(如IDE中的格式化程序),很多文件被標記爲更改,儘管其中大多數只有空白更​​改。

最好甚至能夠直接在SVN客戶端(如TortoiseSVN)上過濾,所以我只能提交具有實際更改的文件,而忽略其餘部分。

+0

您是生成類(.class)還是代碼(.java)?你沒有說它是java,但是問題是......生成源碼或字節碼。 – thekbb

+0

是java類,源代碼(.java文件)。但問題的目標是更通用,因爲它可以應用於任何事情。我把這個問題改寫得更加清楚。 – xsilmarx

回答

0

我有一些java類(.java)是生成的,有時候,根據某些配置(如IDE中的格式化程序),很多文件被標記爲更改,儘管其中大多數只有空白更​​改。

最好的答案是不要將生成的*.java文件存儲在您的代碼中。我們有幾個項目使用WSDL文件來創建必須稍後編譯的Java文件。如果需要生成這些文件,我們只需設置我們的Ant構建即可生成這些文件。

不完全是你在找什麼,但你找到了你不應該在你的倉庫中生成文件的原因之一。

+0

事實並非如此,因爲生成的類也可以手動編輯,並且仍然生成未標記爲已編輯的部分。 – xsilmarx

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 

此腳本添加文件到忽略-ON-commit的更改。然後可以恢復這個更改列表。或者,如果您有信心,可以調整腳本以直接恢復文件,但我更傾向於採用兩步操作。

要使用該腳本,只需將其複製到一個批處理文件,並從Windows命令行通過參數傳遞的目錄搜索,像這樣稱呼它:

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

的腳本配置爲搜索對於java文件,但您可以將其更改爲使用其他文件擴展名,設置變量%fileType% properties。