Не показывать SVN: внешние в статусе SVN - PullRequest
21 голосов
/ 07 мая 2010

Я сделал один svn:external в своем хранилище. Все работает нормально, кроме вывода команды svn status. В выводе есть много информации, которая мне не нужна:

$ svn st
X      lib

Performing status on external item at 'lib'

Я могу запустить svn st --ignore-externals -q и поместить эту строку в небольшой скрипт, но, возможно, есть лучшее решение. Как я могу увидеть статус моей рабочей копии, не видя информации о внешнем?

Ответы [ 3 ]

4 голосов
/ 07 мая 2010

Кажется, что это правильный способ игнорировать внешние эффекты, которые появляются в вашем svn status выводе.

Справка:

http://svnbook.red -bean.com / о / 1,4 / svn.ref.svn.html

0 голосов
/ 31 октября 2012

Я думаю, что пока нет ответа, который действительно решает проблему в том смысле, что если были внесены изменения в часть svn: externals, они, конечно, должны отображаться. Это, вероятно, не имеет смысла для действительно внешних хранилищ. Но я использую svn: externals, чтобы добавить общую папку сборки из того же репозитория в проекты (потому что никакой общей иерархии модулей не существует). И я не хочу использовать опции --ignore-externals -q, так как теряю информацию о не добавленных файлах и изменениях в общем сценарии сборки, который я сделал в этом проекте (который я мог бы захотеть зафиксировать). Мое решение состояло в том, чтобы исправить патч Java-реализации Subversion 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());

Это решает проблему, потому что изменения во внешних элементах также помечены буквой «М» для измененных ...

0 голосов
/ 08 февраля 2012

Поиск вызывает реализацию умного сценария Bash , которая заменяет команду svn сценарием. Однако я хотел сделать нечто подобное в Windows. Удалите каталог svn из вашего PATH, затем создайте пакетный скрипт с именем 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%
...