操作svn
public class SVNKit { private static Logger logger = LoggerFactory.getLogger(SVNKit.class); // 更新状态 true:没有程序在执行更新,反之则反 public static Boolean DoUpdateStatus = true; // 声明SVN客户端管理类 private static SVNClientManager ourClientManager; private String SvnPath;//svn仓库路径 private String TargetPath;//本地仓库路径 private String SvnUserName; private String SvnPassWord; public SVNKit(String SvnPath,String TargetPath,String SvnUserName,String SvnPassWord){ this.SvnPath = SvnPath; this.TargetPath = TargetPath; this.SvnUserName = SvnUserName; this.SvnPassWord = SvnPassWord; } /** * SVN检出 * * @return Boolean */ public Boolean checkOut() { // 初始化库。 必须先执行此操作。具体操作封装在setupLibrary方法中。 /* * For using over http:// and https:// */ DAVRepositoryFactory.setup(); /* * For using over svn:// and svn+xxx:// */ // SVNRepositoryFactoryImpl.setup(); /* * For using over file:/// */ // FSRepositoryFactory.setup(); // 相关变量赋值 SVNURL repositoryURL = null; try { repositoryURL = SVNURL.parseURIEncoded(SvnPath); } catch (SVNException e) { logger.error(e.getMessage(),e); return false; } ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要把版本库的内容check out到的目录 File wcDir = new File(TargetPath); // 通过客户端管理类获得updateClient类的实例。 SVNUpdateClient updateClient = ourClientManager.getUpdateClient(); updateClient.setIgnoreExternals(false); // 执行check out 操作,返回工作副本的版本号。 long workingVersion = -1; try { /*if (!wcDir.exists()) { workingVersion = updateClient.doCheckout(repositoryURL, wcDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); } else { ourClientManager.getWCClient().doCleanup(wcDir); workingVersion = updateClient.doCheckout(repositoryURL, wcDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); }*/ workingVersion = updateClient.doCheckout(repositoryURL, wcDir, SVNRevision.HEAD, SVNRevision.HEAD, SVNDepth.INFINITY, false); } catch (SVNException e) { logger.error(e.getMessage(),e); return false; } catch (Exception e) { logger.error(e.getMessage(),e); return false; } logger.info("把版本:" + workingVersion + " check out 到目录:" + wcDir + "中。"); return true; } /** * 解除svn Luck * * @return Boolean */ public Boolean doCleanup() { ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要把版本库的内容check out到的目录 File wcDir = new File(TargetPath); if (wcDir.exists()) { try { ourClientManager.getWCClient().doCleanup(wcDir); } catch (SVNException e) { logger.error(e.getMessage(),e); return false; } } else { return false; } return true; } /** * 更新svn * * @return int(-1更新失败,1成功,0有程序在占用更新) */ public boolean doUpdate() { if (!SVNKit.DoUpdateStatus) { logger.info("更新程序已经在运行中,不能重复请求!"); return false; } SVNKit.DoUpdateStatus = false; /* * For using over http:// and https:// */ try { DAVRepositoryFactory.setup(); ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要更新的文件 File updateFile = new File(TargetPath); // 获得updateClient的实例 SVNUpdateClient updateClient = ourClientManager.getUpdateClient(); updateClient.setIgnoreExternals(false); // 执行更新操作 logger.info("执行更新svn仓库操作"); updateClient.doUpdate(updateFile, SVNRevision.HEAD, SVNDepth.INFINITY, false, false); DoUpdateStatus = true; return true; } catch (SVNException e) { DoUpdateStatus = true; logger.error(e.getMessage(),e); return false; } } /** * Svn提交 list.add("a.txt")也可直接添加单个文件; list.add("aaa")添加文件夹将添加夹子内所有的文件到svn,预添加文件必须先添加其所在的文件夹; * * @param * @return Boolean */ public Boolean doCommit(List<String> fileRelativePathList) { // 注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。 // 初始化支持svn://协议的库 SVNRepositoryFactoryImpl.setup(); ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要提交的文件夹子 File commitFile = new File(TargetPath); // 获取此文件的状态(是文件做了修改还是新添加的文件?) SVNStatus status; File addFile; String strPath; try { if (fileRelativePathList != null && fileRelativePathList.size() > 0) { for (int i = 0; i < fileRelativePathList.size(); i++) { strPath = fileRelativePathList.get(i); addFile = new File(TargetPath + "/" + strPath); status = ourClientManager.getStatusClient().doStatus(addFile, true); // 如果此文件是新增加的则先把此文件添加到版本库,然后提交。 if (null == status || status.getContentsStatus() == SVNStatusType.STATUS_UNVERSIONED) { // 把此文件增加到版本库中 ourClientManager.getWCClient().doAdd(addFile, false, false, false, SVNDepth.INFINITY, false, false); logger.info("add"); } } // 提交此文件 ourClientManager.getCommitClient().doCommit(new File[] { commitFile }, true, "", null, null, true, false, SVNDepth.INFINITY); logger.info("commit"); } // 如果此文件不是新增加的,直接提交。 else { ourClientManager.getCommitClient().doCommit(new File[] { commitFile }, true, "", null, null, true, false, SVNDepth.INFINITY); logger.info("commit"); } } catch (Exception e) { logger.error(e.getMessage(),e); return false; } // logger.info(status.getContentsStatus()); return true; } /** * Svn提交 * * @param * @return Boolean */ public Boolean doCommit(String fileRelativePath) { // 注意:执行此操作要先执行checkout操作。因为本地需要有工作副本此范例才能运行。 // 初始化支持svn://协议的库 SVNRepositoryFactoryImpl.setup(); ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要提交的文件夹子 File commitFile = new File(TargetPath); // 获取此文件的状态(是文件做了修改还是新添加的文件?) SVNStatus status; File addFile; try { if (fileRelativePath != null && fileRelativePath.trim().length() > 0) { addFile = new File(TargetPath + "/" + fileRelativePath); status = ourClientManager.getStatusClient().doStatus(addFile, true); // 如果此文件是新增加的则先把此文件添加到版本库,然后提交。 if (null == status || status.getContentsStatus() == SVNStatusType.STATUS_UNVERSIONED) { // 把此文件增加到版本库中 ourClientManager.getWCClient().doAdd(addFile, false, false, false, SVNDepth.INFINITY, false, false); logger.info("add"); } // 提交此文件 ourClientManager.getCommitClient().doCommit(new File[] { commitFile }, true, "", null, null, true, false, SVNDepth.INFINITY); logger.info("commit"); } // 如果此文件不是新增加的,直接提交。 else { ourClientManager.getCommitClient().doCommit(new File[] { commitFile }, true, "", null, null, true, false, SVNDepth.INFINITY); logger.info("commit"); } } catch (Exception e) { logger.error(e.getMessage(),e); return false; } // logger.info(status.getContentsStatus()); return true; } /** * 将文件导入并提交到svn 同路径文件要是已经存在将会报错 * * @param * @return Boolean */ public Boolean doImport(String dirPath) { /* * For using over http:// and https:// */ DAVRepositoryFactory.setup(); // 相关变量赋值 SVNURL repositoryURL = null; try { repositoryURL = SVNURL.parseURIEncoded(SvnPath); } catch (SVNException e) { logger.error(e.getMessage(),e); } ISVNOptions options = SVNWCUtil.createDefaultOptions(true); // 实例化客户端管理类 ourClientManager = SVNClientManager.newInstance((DefaultSVNOptions) options, SvnUserName, SvnPassWord); // 要把此目录中的内容导入到版本库 File impDir = new File(dirPath); // 执行导入操作 SVNCommitInfo commitInfo = null; try { commitInfo = ourClientManager.getCommitClient().doImport(impDir, repositoryURL, "import operation!", null, false, false, SVNDepth.INFINITY); } catch (SVNException e) { logger.error(e.getMessage(),e); return false; } logger.info(commitInfo.toString()); return true; } }
操作git仓库
public class GitUtil { private static Logger logger = LoggerFactory.getLogger(GitUtil.class); /** * 拉取远程仓库内容到本地,需要账号和密码的 */ public static boolean gitPull(String localPath, String username, String password, String branch){ UsernamePasswordCredentialsProvider provider = new UsernamePasswordCredentialsProvider(username, password); //git仓库地址 Repository repository; try { repository = new FileRepository(localPath + "/.git"); Git git = new Git(repository); git.pull().setRemoteBranchName(branch).setCredentialsProvider(provider).call(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } public static boolean cloneRepository(String localPath, String username, String password, String uri,String branch) { //设置远程服务器上的用户名和密码 UsernamePasswordCredentialsProvider usernamePasswordCredentialsProvider = new UsernamePasswordCredentialsProvider(username, password); //克隆代码库命令 CloneCommand cloneCommand = Git.cloneRepository(); try { cloneCommand.setURI(uri) //设置远程URI .setBranch(branch) //设置clone下来的分支 .setDirectory(new File(localPath)) //设置下载存放路径 .setCredentialsProvider(usernamePasswordCredentialsProvider) //设置权限验证 .call(); return true; } catch (GitAPIException e) { logger.error("克隆远程仓库内容到本地异常:", e); return false; } } }