2010-08-03 19 views
8

Gözden geçirmenin belgelendiği wiki'de göremiyorum. İdeal olarak, sadece klasör değil ... ve daha sonra uygulama kapanırsa ya da başka bir şekilde, bu dosyaya değişiklikleri geri yapabilir, bir dosya "example/folder/file.xml" kontrol etmek istiyorum. Bunu nasıl yaparım?SVNKit ile Dizin/Dosya Kontrolü/Check out

cevap

8

Subversion'da bir dosya teslim edemiyorsunuz. Bir klasöre bakmalısın.

bir veya daha fazla dosya içeren bir klasörü kontrol etmek için:

SVNKit geliştirici olarak
SVNClientManager ourClientManager = SVNClientManager.newInstance(null, 
      repository.getAuthenticationManager()); 
ourClientManager.getWCClient().doInfo(wcPath, SVNRevision.HEAD); 
ourClientManager.getCommitClient().doCommit 
     (new File[] { wcPath }, keepLocks, commitMessage, false, true); 
+1

+1 çok yararlı bir yanıt. Buna ek olarak, bir dosyayı ** dışarı aktarmak istiyorsanız ** bunu ['updateClient.doExport (url, destPath, revizyon, revizyon, eolStyle, force, isRecursive)'] kullanarak yapabilirsiniz (http://svnkit.com /javadoc/org/tmatesoft/svn/core/wc/SVNUpdateClient.html#doExport%28org.tmatesoft.svn.core.SVNURL,%20java.io.File,%20org.tmatesoft.svn.core.wc.SVNRevision,% 20org.tmatesoft.svn.core.wc.SVNRevision,% 20java.lang.String,% 20boolean,% 20boolean% 29) –

+0

DoExport'ta listelenen aşırı yüklenme, SVNKit 1.7.5-v1'de kullanımdan kaldırılmıştır. Bunun yerine aşağıdaki aşırı yüklemeyi kullandım: 'updateClient.doCheckout (url, destPath, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, true);' – jbandi

+0

Yukarıdaki kodu kullanarak bir uyarı alıyorum "Yöntem doCheckout (SVNURL , SVNUpdateClient türünden Dosya, SVNRevision, SVNRevision, boolean) kullanımdan kaldırılmıştır "... Herhangi bir fikir doCheckout yerine hangi yöntemi kullanacaksınız ?? – Lucy

18

, ben yeni tercih etmenizi öneriyoruz:

SVNClientManager ourClientManager = SVNClientManager.newInstance(null, 
      repository.getAuthenticationManager()); 
SVNUpdateClient updateClient = ourClientManager.getUpdateClient(); 
updateClient.setIgnoreExternals(false); 
updateClient.doCheckout(url, destPath, revision, revision, 
      isRecursive); 

önceden klasör teslim işlemek için SvnOperationFactory dayalı API. Eski API (SVNClientManager'a dayanarak) hala çalışır durumda olacak ancak tüm yeni SVN özellikleri sadece yeni API'ye gelecek.

final SvnOperationFactory svnOperationFactory = new SvnOperationFactory(); 
try { 
    final SvnCheckout checkout = svnOperationFactory.createCheckout(); 
    checkout.setSingleTarget(SvnTarget.fromFile(workingCopyDirectory)); 
    checkout.setSource(SvnTarget.fromURL(url)); 
    //... other options 
    checkout.run(); 
} finally { 
    svnOperationFactory.dispose(); 
} 
+0

bu yüzden workingCopyDirectory öğesini "File workingCopyDirectory = new File ("/home/lucy ") olarak bildirmemiz gerekiyor." ??? – Lucy

+0

Evet, eğer çalışma kopyalama dizininizin/home/lucy'de olmasını istiyorsanız –

+0

tamam .. Başka bir şüphe var .. SvnOperationFactory bir partikar SVN yolunda veya sadece dosyalarda saklanan dosyalar ile birlikte bir klasör kopyalayacaktır? – Lucy

0

Ayrıca, Dmitry Pavlenko tarafından önerilen kod snippet'ini de kullandım ve sorun yaşamadım. Ancak 35 MB'lik bir repo çalışmasının kontrol edilmesi veya güncellenmesi yaklaşık 30 dakika sürdü. Usecase'de kullanılamıyor (sadece bir web uygulamasının içeriğinin/belgelerinin/medyasının bir parçası olarak bir dizin yapısının kontrol edilmesi). Ya da bazı hatalar yaptım mı?

final ISVNAuthenticationManager authManager = SVNWCUtil.createDefaultAuthenticationManager(name, password); 
final SVNURL svnUrl = SVNURL.create(url.getProtocol(), name, url.getHost(), 443, url.getPath(), true); 

SVNRepository svnRepo= SVNRepositoryFactory.create(svnUrl); 
svnRepo.setAuthenticationManager(authManager); 
svnOperationFactory.setAuthenticationManager(authManager); 

SVNDirEntry entry = svnRepo.info(".", -1); 
long remoteRevision = entry.getRevision(); 

if (!workingCopyDirectory.exists()) { 
    workingCopyDirectory.mkdirs(); 
} 

final SvnCheckout checkout = svnOperationFactory.createCheckout(); 
checkout.setSource(SvnTarget.fromURL(svnUrl)); 
checkout.setSingleTarget(SvnTarget.fromFile(workingCopyDirectory)); 
remoteRevision = checkout.run(); 
+0

Aynı problemim var, sonsuza dek bitirmek ... Eksik bir parametre olmalı. Hiç çözdün mü? –