23

svn:externalリポジトリに作成しました。コマンドの出力を除いて、すべて正常に動作しますsvn status。出力には、必要のない多くの情報があります。

$ svn st
X      lib

Performing status on external item at 'lib'

実行svn st --ignore-externals -qして、この行を小さなスクリプトに配置することはできますが、もっと良い解決策があるかもしれません。外部に関する情報を表示せずに作業コピーのステータスを確認するにはどうすればよいですか?

4

3 に答える 3

4

svn statusこれは、出力に表示される外部を無視する適切な方法のようです。

参照:

http://svnbook.red-bean.com/en/1.4/svn.ref.svn.html

于 2010-05-07T15:48:41.300 に答える
0

svn:externals の一部に変更が加えられた場合、それらはもちろん表示されるべきであるという意味で、まだ本当に問題を解決する答えはないと思います。これはおそらく、実際の外部リポジトリには意味がありません。しかし、svn:externals を使用して、同じリポジトリからプロジェクトに一般的なビルド フォルダーを追加します (モジュールの一般的な階層が存在しないため)。--ignore-externals -qまた、追加されていないファイルに関する情報と、このプロジェクトで行った一般的なビルド スクリプトの変更 (コミットしたい場合があります) を失うため、オプションを使用したくありません。私の解決策は、サブバージョン 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' でマークされているためです...

于 2012-10-31T07:34:17.553 に答える
0

検索すると、コマンドをスクリプトでオーバーライドする巧妙な Bash スクリプトの実装が見つかります。svnただし、Windowsで同様のことをしたかったのです。svnからディレクトリを削除してから、PATHという名前のバッチ スクリプトを作成し、 (のように)svn.batのどこかに配置します。PATHC:\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%
于 2012-02-08T17:53:40.470 に答える