为什么 Java SVNKit 在错误的地方添加文件夹
Why Java SVNKit add folder in a wrong place
在我的svn仓库中,目录层次是这样的:
/dirA(exists)/
/dirB(exists)/
哪个dirB在dirA中,并且都存在
现在,我想在dirB中添加一个文件夹(dirC),在dirC中添加一个文件(file1.txt),所以我希望目录层次结构是这样的:
/dirA(exists)/
/dirB(exists)/
/dirC(added)/
/file1.txt(added)
使用 SVNKit,我的 SVNRepository 实例指向 dirA,
我使用 getCommitEditor() 获取 ISVNEditor 的实例,并调用它的 openRoot(-1) 方法,如下所示:
ISVNEditor svnEditor = svnRepository.getCommitEditor("add folder and file.", null);
svnEditor.openRoot(-1);
我调用ISVNEditor的addDir()方法和addFile()方法来添加文件夹和文件,像这样:
svnEditor.addDir("dirB/dirC", null, -1);
svnEditor.addFile("dirB/dirC/file1.txt", null, -1);
svnEditor.applyTextDelta("dirB/dirC/file1.txt", null);
SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator();
String checksum = deltaGenerator.sendDelta("dirB/dirC/file1.txt", new ByteArrayInputStream(data), svnEditor, true);
svnEditor.closeFile("dirB/dirC/file1.txt", checksum);//Closes the new added file.
svnEditor.closeDir(); //Closes the new added folder.
svnEditor.closeDir(); //Closes the root folder.
svnEditor.closeEdit();
之后为什么dirC加在dirA里,不加在dirB里,目录层次变成这样:
/dirA(root)/
/dirB(exists)/
/dirC(added)/
/file1.txt(added)
我在调用
时已指示 dirC 在 dirB 下
svnEditor.addDir("dirB/dirC", null, -1),
但是好像不行?
预先感谢回答我的问题。
要更改文件夹,您需要提供 dirB 的本地修订版。
//provide your local revision of dirB
long r = ...;
svnEditor.openDir( "dirB" , r );
所以现在你在你的 dirB 之下。到达那里后,您可以在 dirB 下添加文件或文件夹。如果您想进一步深入,例如在 dirC 中,那么您必须再次提供 dirC 的本地修订版并在那里添加一个文件。
在我的svn仓库中,目录层次是这样的:
/dirA(exists)/
/dirB(exists)/
哪个dirB在dirA中,并且都存在
现在,我想在dirB中添加一个文件夹(dirC),在dirC中添加一个文件(file1.txt),所以我希望目录层次结构是这样的:
/dirA(exists)/
/dirB(exists)/
/dirC(added)/
/file1.txt(added)
使用 SVNKit,我的 SVNRepository 实例指向 dirA, 我使用 getCommitEditor() 获取 ISVNEditor 的实例,并调用它的 openRoot(-1) 方法,如下所示:
ISVNEditor svnEditor = svnRepository.getCommitEditor("add folder and file.", null);
svnEditor.openRoot(-1);
我调用ISVNEditor的addDir()方法和addFile()方法来添加文件夹和文件,像这样:
svnEditor.addDir("dirB/dirC", null, -1);
svnEditor.addFile("dirB/dirC/file1.txt", null, -1);
svnEditor.applyTextDelta("dirB/dirC/file1.txt", null);
SVNDeltaGenerator deltaGenerator = new SVNDeltaGenerator();
String checksum = deltaGenerator.sendDelta("dirB/dirC/file1.txt", new ByteArrayInputStream(data), svnEditor, true);
svnEditor.closeFile("dirB/dirC/file1.txt", checksum);//Closes the new added file.
svnEditor.closeDir(); //Closes the new added folder.
svnEditor.closeDir(); //Closes the root folder.
svnEditor.closeEdit();
之后为什么dirC加在dirA里,不加在dirB里,目录层次变成这样:
/dirA(root)/
/dirB(exists)/
/dirC(added)/
/file1.txt(added)
我在调用
时已指示 dirC 在 dirB 下svnEditor.addDir("dirB/dirC", null, -1),
但是好像不行? 预先感谢回答我的问题。
要更改文件夹,您需要提供 dirB 的本地修订版。
//provide your local revision of dirB
long r = ...;
svnEditor.openDir( "dirB" , r );
所以现在你在你的 dirB 之下。到达那里后,您可以在 dirB 下添加文件或文件夹。如果您想进一步深入,例如在 dirC 中,那么您必须再次提供 dirC 的本地修订版并在那里添加一个文件。