9

Java プロジェクトを作成しました。SVNKit を使用して、このプロジェクトを SVN の場所にチェックインしたいと考えています。

以下のコードを使用して、SVN リポジトリにフォルダーを追加します。.svnしかし、それはフォルダー内にフォルダーを作成しませんでした/Users/test/svnAddDirCheck

ファイルをチェックインしたいし、変更したファイルを将来的にコミットしたい。ソースコードをチェックアウトせずに、どうすればこれを行うことができますか? これらのファイルを SVN に追加したり、変更したファイルを直接コミットしたりできますか?

@Test
public void importWholeDir() throws Exception {
    try {
        DAVRepositoryFactory.setup();
        SVNRepositoryFactoryImpl.setup();
        FSRepositoryFactory.setup();

        String svnUrl = "https://abc.com/svn/repos/projects/test/CREATE2";
        File dir = new File("/Users/test/svnAddDirCheck");
        SVNURL url = SVNURL.parseURIDecoded(svnUrl);
        String userName = "XXXXXXX";
        String userPassword = "XXXXXXXXX";

        importDirectoryContentToSubversion(svnUrl, dir.getPath(), userName, userPassword, "directory and file added");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public static SVNCommitInfo importDirectoryContentToSubversion(final String repositoryURL, final String subVersionedDirectory, final String userName, final String hashedPassword, final String commitMessage) throws SVNException {
    final SVNClientManager cm = SVNClientManager.newInstance(new DefaultSVNOptions(), userName, hashedPassword);
    return cm.getCommitClient().doImport(new File(subVersionedDirectory), SVNURL.parseURIEncoded(repositoryURL), "<import> " + commitMessage, null, false, true, SVNDepth.fromRecurse(true));
}
4

2 に答える 2

1

SVNKit が実際に作業コピーではなく、リポジトリへの svn add を行っていると思いますか? あれは正しいですか?

その場合、ファイルを含むフォルダーをチェックアウトしない限り、リポジトリにファイルを追加することはできません。

また、使用しているSVNのバージョンは何ですか? 1.7 では、作業コピーのすべてのフォルダーに .svn フォルダーが配置されるのではなく、ルート フォルダーにのみ配置されます。

基本的にやりたいこと、疑似コードは次のとおりです。

  1. フォルダー/ファイルを追加するディレクトリをチェックアウトします。他のフォルダー ファイルを含むフォルダーの場合は、 --empty の深さでチェックアウトできるため、そのフォルダーにチェックインされる可能性のある他のファイル/フォルダーは取得されません。

  2. 新しいフォルダー/ファイルを作成します。

  3. svn kit を使用して、ファイルを作業コピーに「追加」します。

  4. svn kit を使用して、フォルダ/ファイルをリポジトリに追加する作業コピーを「コミット」します。

もちろん、ステップ 1 は、まだ行っていない場合にのみ行う必要があります。手動で行う場合と同じ手順に従う必要があります。基本的な使用方法については、svn のドキュメントを確認することをお勧めします。svn.exe でやりたいことを実行できるようになると、svnkit API を使用して簡単に複製できます。

于 2013-03-15T19:38:45.243 に答える
0

これが SVN の仕組みです。将来の変更をコミットする場合は、ローカル フォルダーを作業コピーにする必要があります。作業コピーを取得するには、チェックアウトする必要があります。

私が時々使用する代替手段は

  • 空のフォルダーをリポジトリに直接作成し、
  • ローカル フォルダーでそのフォルダーをチェックアウトする (その.svnフォルダーを含む作業コピーにする)
  • 次に、既存のファイルを追加してコミットします
于 2013-01-07T17:43:57.187 に答える