[英]Don't show svn:externals in svn status
我在我的存儲庫中創建了一個svn:external
。 一切正常,除了svn status
命令的輸出。 在輸出中有很多我不需要的信息:
$ svn st
X lib
Performing status on external item at 'lib'
我可以運行svn st --ignore-externals -q
,我可以將這一行放在一個小腳本中,但也許有更好的解決方案。 如何在不查看外部信息的情況下查看工作副本的狀態?
我認為沒有答案真正解決問題,因為如果svn:externals的一部分發生了變化,它們當然應該顯示出來。 這對於真正的外部存儲庫來說是沒有意義的。 但我使用svn:externals將同一存儲庫中的常規構建文件夾添加到項目中(因為不存在模塊的一般層次結構)。 而且我不想使用選項--ignore-externals -q
因為我丟失了有關未添加文件的信息以及我在此項目中完成的常規構建腳本中的更改(我可能想要提交)。 我的解決辦法來修補顛覆java命令行implemantation 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'來修改......
搜索會顯示一個聰明的Bash腳本實現,該腳本實現會使用腳本覆蓋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%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.