jgit是一个java代码提交git的插件,可以通过代码连接git远程仓库,在本地建立版本库,进行拉取、提交、推送等操作。
首先贴出maven依赖
org.eclipse.jgit org.eclipse.jgit 3.7.0.201502260915-r
当然还可以使用其他版本的依赖,大致操作都一样。
然后就是代码中的操作了
首先声明一些常量,然后在本地建立版本库
//定义本地git路径 public static final String LOCALPATH = "D:/git_home/demo/"; //.git文件路径 public static final String LOCALGITFILE = LOCALPATH + ".git"; //远程仓库地址 public static final String REMOTEREPOURI = "http://172.16.124.101/yangyi/RegexFile.git";//操作git的用户名 public static final String USER = "8844@163.com"; //密码 public static final String PASSWORD = "123456"; //git远程仓库服务器ip public static final String HOST = "172.16.124.101"; //建立与远程仓库的联系,仅需要执行一次 public static String setupRepo() { String msg = ""; try { Git git = Git.cloneRepository() .setURI(REMOTEREPOURI) .setCredentialsProvider(new UsernamePasswordCredentialsProvider(USER, PASSWORD)) .setBranch("master") .setDirectory(new File(LOCALPATH)).call(); msg = "git init success!"; } catch (Exception e) { msg = "git已经初始化!"; } return msg; }
建立本地git仓库 然后就是拉取远程的文件了
//pull拉取远程仓库文件 public static boolean pullBranchToLocal(){ boolean resultFlag = false; //git仓库地址 Git git; try { git = new Git(new FileRepository(LOCALGITFILE)); git.pull().setRemoteBranchName("master") .setCredentialsProvder(new UsernamePasswordCredentialsProvider(USER,PASSWORD)).call(); resultFlag = true; } catch (IOException | GitAPIException e) { e.printStackTrace(); } return resultFlag; }
然后就是提交推送到git了
//提交git public static boolean commitFiles() { Git git = null; try { git = Git.open(new File(LOCALGITFILE)); AddCommand addCommand = git.add(); //add操作 add -A操作在jgit不知道怎么用 没有尝试出来 有兴趣的可以看下jgitAPI研究一下 欢迎留言 addCommand.addFilepattern(".").call(); RmCommand rm=git.rm(); Status status=git.status().call(); //循环add missing 的文件 没研究出missing和remove的区别 就是删除的文件也要提交到git Setmissing=status.getMissing(); for(String m : missing){ logger.info("missing files: "+m); rm.addFilepattern(m).call(); //每次需重新获取rm status 不然会报错 rm=git.rm(); status=git.status().call(); } //循环add remove 的文件 Set removed=status.getRemoved(); for(String r : removed){ logger.info("removed files: "+r); rm.addFilepattern(r).call(); rm=git.rm(); status=git.status().call(); } //提交 git.commit().setMessage("commit").call(); //推送 git.push().setCredentialsProvider(new UsernamePasswordCredentialsProvider(USER, PASSWORD)).call(); return true; } catch (Exception e) { e.printStackTrace(); return false; } }
然后写个方法测试一下
public static void main(String[] args) { setupRepo(); pullBranchToLocal(); commitFiles(); }
如有问题,欢迎留言