有时候我们需要读取svn或者git上面最新的代码生产某些文件,这种情况下,如果我们需要使用java操作,可以使用quartz配合svnkit或者jgit取svn上的最新内容,帮我们生成对应的文件。
Svnkit中的SVNClientManager几乎包含了所有需要的功能
①SVNLogClient主要用来获取版本的历史修改记录、注释和树的数目
②SVNUpdateClient主要用来更新、检出(check out)、更改检出路径(relocate)、切换分支(switch)
③SVNCommitClient导入文件(import)、提交修改(commit)、提交删除、生成目录
④SVNWCClient功能较多,但是主要使用添加文件或目录、删除文件或目录、回退修改(revert)
⑤SVNDiffClient用来比较两个版本的差异、合并版本(merge)
下面代码实现更新或检出svn上面的最新文件.
SVNManger.java
public class SVNManager {
private String url = "svn://repository";
private String username = "test";
private String password = "test";
private static SVNManager svnManager = new SVNManager();
private SVNURL svnUrl = null;
private SVNClientManager svnClientManager = null;
private SVNUpdateClient updateClient = null;
private SVNManager() {
init();
}
public static SVNManager getInstance() {
return svnManager;
}
public void init() {
DAVRepositoryFactory.setup();
SVNRepositoryFactoryImpl.setup();
FSRepositoryFactory.setup();
try {
svnUrl = SVNURL.parseURIEncoded(url);
} catch (SVNException e) {
e.printStackTrace();
}
ISVNOptions options = SVNWCUtil.createDefaultOptions(true);
svnClientManager = SVNClientManager.newInstance(
(DefaultSVNOptions) options, username, password);
updateClient = svnClientManager.getUpdateClient();
updateClient.setIgnoreExternals(false);
}
public long checkOutOrUpdate(String url) {
File file = new File(url);
return file.exists() ? update(file) : checkout(file);
}
private long update(File file) {
try {
return updateClient.doUpdate(file, SVNRevision.HEAD, SVNDepth.INFINITY, true, false);
} catch (SVNException e) {
e.printStackTrace();
}
return -1;
}
private long checkout(File file) {
file.mkdir();
try {
return updateClient.doCheckout(svnUrl, file, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, true);
} catch (SVNException e) {
e.printStackTrace();
}
return -1;
}
}
SVNKitTest.java
public class SVNKitTest {
/**
* @param args
*/
public static void main(String[] args) {
SVNManager manager = SVNManager.getInstance();
long checkOutOrUpdate = manager.checkOutOrUpdate("E:\\example");
System.out.println(checkOutOrUpdate);
}
}
只实现了检出和更新,SVN的其他操作和JGit没有实现。