技术文章 · 1649 阅读
纯java实现的开源 SVN客户端
From Evernote:
纯java实现的开源 SVN客户端 - GeekGao的日志 - 网易博客
Clipped from: http://eatsalt.blog.163.com/blog/static/879402662009102402949523/
纯java实现的开源 SVN客户端
2009-11-24 12:29:49| 分类: Java |字号 订阅
一个月前,公司计划要做个内部使用的项目托管站点,后来因为人员、时间等原因就搁置了。通过Google发现了一个很好的解决方案 ,这就是:
SVNKit 是一个完全基于Java的Subversion开源工具库。SVNKit支持Java API控制和操作Subversion工作拷贝和资源。SVNKit支持http,https,svn 和 svn+ssh连接协议等。
通过SVNKit,你可以很容易的操作控制Subversion。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
Java代码
File dstPath = new File("c:/svnkit");
SVNURL url = SVNURL.
parseURIEncoded("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/");
SVNClientManager cm = SVNClientManager.newInstance();
SVNUpdateClient uc = cm.getUpdateClient();
uc.doCheckout(url, dstPath, SVNRevision.UNDEFINED, SVNRevision.HEAD, true);
File dstPath = new File("c:/svnkit");
SVNURL url = SVNURL.
parseURIEncoded("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/");
SVNClientManager cm = SVNClientManager.newInstance();
SVNUpdateClient uc = cm.getUpdateClient();
uc.doCheckout(url, dstPath, SVNRevision.UNDEFINED, SVNRevision.HEAD, true);
Updates it to the latest revision:
Java代码
uc.doUpdate(dstPath, SVNRevision.HEAD, true);
uc.doUpdate(dstPath, SVNRevision.HEAD, true);
And finally commits local changes in "www" subdirectory if there are any:
Java代码
SVNCommitClient cc = cm.getCommitClient();
cc.doCommit(new File[] {new File(dstPath, "www")}, false, "message", false, true);
SVNCommitClient cc = cm.getCommitClient();
cc.doCommit(new File[] {new File(dstPath, "www")}, false, "message", false, true);
Access Subversion repository directly:
Java代码
SVNURL url = SVNURL.parseURIEncoded("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/");
SVNRepository repos = SVNRepositoryFactory.create(url);
long headRevision = repos.getLatestRevision();
Collection entriesList = repos.getDir("www", headRevision, null, (Collection) null);
for (Iterator entries = entriesList.iterator(); entries.hasNext();) {
SVNDirEntry entry = (SVNDirEntry) entries.next();
System.out.println("entry: " + entry.getName());
System.out.println("last modified at revision: " + entry.getDate() +
" by " + entry.getAuthor());
}
SVNURL url = SVNURL.parseURIEncoded("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/");
SVNRepository repos = SVNRepositoryFactory.create(url);
long headRevision = repos.getLatestRevision();
Collection entriesList = repos.getDir("www", headRevision, null, (Collection) null);
for (Iterator entries = entriesList.iterator(); entries.hasNext();) {
SVNDirEntry entry = (SVNDirEntry) entries.next();
System.out.println("entry: " + entry.getName());
System.out.println("last modified at revision: " + entry.getDate() +
" by " + entry.getAuthor());
}
Replace JNI Subversion bindings with SVNKit:
Java代码
// pure Java implementation of the standard Subversion Java interface
SVNClientInterface jniAPI = SVNClientImpl.newInstance();
byte[] contents =
jniAPI.fileContent("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/changelog.txt",
Revision.HEAD);
// pure Java implementation of the standard Subversion Java interface
SVNClientInterface jniAPI = SVNClientImpl.newInstance();
byte[] contents =
jniAPI.fileContent("http://svn.svnkit.com/repos/svnkit/branches/1.1.x/changelog.txt",
Revision.HEAD);
---|---
官方站点:http://www.svnkit.com
DOC: http://svnkit.com/javadoc/index.html