不要在svn状态中显示svn:externals

23
我在我的代码库中添加了一个 svn:external。一切正常,除了 svn status 命令的输出结果包含了我不需要的很多信息。
$ svn st
X      lib

Performing status on external item at 'lib'

我可以运行svn st --ignore-externals -q并将此行放入小脚本中,但也许有更好的解决方案。如何在不看外部信息的情况下查看我的工作副本状态?

我可以运行svn st --ignore-externals -q并将此行放入小脚本中,但也许有更好的解决方案。如何在不看外部信息的情况下查看我的工作副本状态?


2
+1 我有同样的问题,我更希望--ignore-externals成为默认值或可配置为默认值。 - amit kumar
4
明确一下:-q(静默模式)会移除“X lib”行,--ignore-externals会移除“Performing status on external item at 'lib'”行。最好根据这些信息更新答案。 - amit kumar
2
就此而言,http://subversion.tigris.org/issues/show_bug.cgi?id=1935 有一个漫长的讨论,我还没有读完。到目前为止,看起来在2004年已经建立了修复这个问题的合理共识... /-: - tripleee
1
哦,实际上,补丁已经被审查并(如果我理解正确)建议包含在1.8.0版中。 - tripleee
3个回答

4

4
这虽然是古老的历史,但这个答案需要包括实际的答案:链接可能会失效。 - GreenAsJade
2
svn status --ignore-externals - tuxayo

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'表示已修改...


0

搜索发现有一个聪明的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%

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接