使用SVNKit添加文件夹和提交文件

时间:2012-12-19 09:01:05

标签: java svn svnkit

我刚刚创建了一个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));
}

2 个答案:

答案 0 :(得分:1)

我假设SVNKit实际上正在对存储库进行svn添加而不是工作副本?这是对的吗?

如果是这样,除非您拥有包含签出文件的文件夹,否则无法将文件添加到存储库。

您还在使用什么版本的SVN? 1.7不再将.svn文件夹放在工作副本的每个文件夹中,只在根文件夹中。

基本上你想做什么,伪代码是:

  1. 查看要添加文件夹/文件的目录。如果它是包含其他文件夹文件的文件夹,您可以使用--empty深度检查它,这样您就不会获得可以检入该文件夹的任何其他文件/文件夹。

  2. 创建新文件夹/文件。

  3. 使用svn工具包将文件“添加”到工作副本。

  4. 使用svn工具包“提交”将文件夹/文件添加到存储库的工作副本。

  5. 当然,只有在您尚未完成步骤1时才需要执行步骤1。您可以按照您手动执行的相同步骤操作。我建议你查看关于基本用法的svn文档。一旦你可以用svn.exe做你想做的事情,使用svnkit API复制它应该相当容易。

答案 1 :(得分:0)

这是SVN的工作方式,如果您想提交将本地文件夹作为工作副本所需的未来更改,并获得工作副本,则需要签出。

我有时使用的替代方案是

  • 直接在存储库中创建一个空文件夹,
  • 检出本地文件夹上的该文件夹(使其成为.svn文件夹的工作副本)
  • 然后添加并提交现有文件