0

SVNKitで利用可能なAPIを使用してファイルをSVNにコミットしています。

ourClientManager.getCommitClient().doCommit(mypaths, kpLocks, "", force-yes, recursive-true);

ファイルをチェックインする前に、ファイルのディレクトリが作業コピーの一部であるかどうかを確認したいと思います。この情報を取得するために使用できるAPIを提案してください。

4

3 に答える 3

2

これを理解するためにステータスを使用したい:

ourClientManager.getStatusClient().doStatus(path, false).isVersioned()

複数のファイルがバージョン管理されているかどうかを確認したい場合は、おそらく。を記述しISVNStatusHandlerます。

SVNKitドキュメントへのリンク: http ://svnkit.com/javadoc/org/tmatesoft/svn/core/wc/SVNStatusClient.html

于 2013-03-22T23:31:03.590 に答える
2

SVNKit開発者として、SVNWCUtil#isVersionedDirectoryまたはSvnOperationFactory#isVersionedDirectoryを使用することをお勧めします。

SvnOperationFactory#isVersionedDirectoryは、非常に特殊なケースを区別するために使用される「isAdditionMode」パラメーターを受け入れることができます。作業コピーには、ネストされた作業コピーを指すバージョン管理されていないシンボリックリンクがあります。「svnadd」を除くすべての操作では、このシンボリックリンクはバージョン管理されていると見なす必要があります。これは、作業コピーを指しているためです(特に、「svn info this_symlink」は、ネストされた作業コピーの情報を示します)が、「svnadd」については考慮する必要があります。バージョン管理されていないため、ユーザーはsvn:specialプロパティを持つファイルとしてリポジトリに追加できます(作業コピーがすでにバージョン管理されているというエラーを表示する代わりに)。

于 2013-03-27T23:54:34.503 に答える
1

こんにちは、次の方法を使用して、変更されたファイルとバージョン管理されていないファイルのリストを取得できます

public List<SVNStatus> getCommitableFiles(File path, String revision) throws SVNException {
    SVNClientManager svnClientManager = SVNClientManager.newInstance();
    final List<SVNStatus> allSVNStatus = new ArrayList<SVNStatus>();
    svnClientManager.getStatusClient().doStatus(path, SVNRevision.parse(revision), SVNDepth.INFINITY, false, false, false, false, new ISVNStatusHandler() {
        public void handleStatus(SVNStatus status) throws SVNException {
            SVNStatusType statusType = status.getContentsStatus();
            if (statusType != SVNStatusType.STATUS_NONE && statusType != SVNStatusType.STATUS_NORMAL
                    && statusType != SVNStatusType.STATUS_IGNORED) {
                allSVNStatus.add(status);
            }
        }
    }, null);

    return allSVNStatus;
}
于 2013-04-03T07:28:09.707 に答える