我刚刚创建了一个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));
}
答案 0 :(得分:1)
我假设SVNKit实际上正在对存储库进行svn添加而不是工作副本?这是对的吗?
如果是这样,除非您拥有包含签出文件的文件夹,否则无法将文件添加到存储库。
您还在使用什么版本的SVN? 1.7不再将.svn文件夹放在工作副本的每个文件夹中,只在根文件夹中。
基本上你想做什么,伪代码是:
查看要添加文件夹/文件的目录。如果它是包含其他文件夹文件的文件夹,您可以使用--empty深度检查它,这样您就不会获得可以检入该文件夹的任何其他文件/文件夹。
创建新文件夹/文件。
使用svn工具包将文件“添加”到工作副本。
使用svn工具包“提交”将文件夹/文件添加到存储库的工作副本。
当然,只有在您尚未完成步骤1时才需要执行步骤1。您可以按照您手动执行的相同步骤操作。我建议你查看关于基本用法的svn文档。一旦你可以用svn.exe做你想做的事情,使用svnkit API复制它应该相当容易。
答案 1 :(得分:0)
这是SVN的工作方式,如果您想提交将本地文件夹作为工作副本所需的未来更改,并获得工作副本,则需要签出。
我有时使用的替代方案是
.svn
文件夹的工作副本)