善忘技术夹 Logo
善忘技术夹
技术文章 · 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