2010-05-07 189 views
19

我在我的存儲庫中創建了一個svn:external。一切工作正常,除了svn status命令的輸出。在輸出有很多信息,我不需要:不要在svn狀態下顯示svn:externals

$ svn st 
X  lib 

Performing status on external item at 'lib' 

我可以運行svn st --ignore-externals -q,我可以放在一個小腳本這一行,但也許有更好的解決方案。如何查看我的工作副本的狀態而無需查看關於外部的信息?

+1

+1我有同樣的問題,我寧願喜歡 - 忽略的外部是默認或可配置爲默認。 – 2010-09-02 04:27:58

+2

只需清楚:-q(安靜模式)刪除「X lib」行並且--ignore-externals刪除「在'lib'上執行外部項目的狀態」行。最好根據此更新答案。 – 2010-09-02 04:31:03

+2

對於它的價值,http://subversion.tigris.org/issues/show_bug.cgi?id=1935有一個漫長的討論,我還沒有完成閱讀。到目前爲止,它似乎是一個合理的共識,如果在2004年確定了這個問題....../- :: – tripleee 2012-03-15 13:44:07

回答

0

搜索變成了一個clever Bash script實現,覆蓋了腳本svn命令。不過,我想在Windows中做類似的事情。從PATH刪除svn目錄,然後創建一個名爲svn.bat批處理腳本,並把它放在你的PATH(如C:\Windows):

@echo off 
setlocal 

if (%1)==(st) goto :match 
if (%1)==(stat) goto :match 
if (%1)==(status) goto :match 

:: If not running Status command, just pass the args along 
"C:\Program Files\SlikSvn\bin\svn" %* 
goto :eof 

:match 

:: Init variables 
set svnargs1= 
set svnargs2=--ignore-externals 

:: Loop through arguments 
:loop 
if "%~1"=="" goto :cont 

:: Look for ignore externals flag 
if "%~1"=="--examine-externals" (
    set svnargs2= 
) else (
    if "%~1"=="-h" (
     set svnargs2= 
    ) 

    set svnargs1=%svnargs1% %1% 
) 


shift & goto :loop 
:cont 

:: Call svn 
"C:\Program Files\SlikSvn\bin\svn" %svnargs1% %svnargs2% 
0

我覺得沒有答案尚未真正解決了在這個意義上的問題,如果改變svn:externals的一部分已經制作完成,當然應該顯示它們。這對於真正的外部存儲庫來說是沒有意義的。但是我使用svn:externals將同一個存儲庫中的一個通用構建文件夾添加到項目中(因爲不存在模塊的通用層次)。我不想使用選項--ignore-externals -q,因爲我鬆散了有關未添加文件的信息以及我在此項目中完成的一般構建腳本(我可能想要提交)中的更改。我的解決方案是修補subversion java命令行實現svnkit

AbstractSVNCommand.registerCommand(new SVNStatusCommand()); 
final ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
final PrintStream stream = new PrintStream(bos); 

final SVNCommandLine commandLine = new SVNCommandLine(); 
commandLine.init(new String[] { "status", "PATH..." }); 

final SVNCommandEnvironment env = new SVNCommandEnvironment("mySvn", stream, stream, System.in); 
env.init(commandLine); 
env.initClientManager(); 

final SVNStatusCommand svnStatusCall = new SVNStatusCommand(); 
svnStatusCall.init(env); 
svnStatusCall.run(); 
stream.flush(); 
String result = new String(bos.toByteArray()); 

StringBuffer buffer = new StringBuffer(); 
Scanner scanner = new Scanner(result); 
while (scanner.hasNextLine()) { 
    String line = scanner.nextLine(); 
    if (line.startsWith("X") || line.startsWith("Performing status on external item at")) { 
     // ignore this output 
    } else if (line.trim().isEmpty() == false) { 
     buffer.append(line + "\n"); 
    } 
} 

System.out.println(buffer.toString()); 

這解決了問題,因爲在變化的外部還標有「M」的修改...