jgit是一個java代碼提交git的插件,能夠經過代碼鏈接git遠程倉庫,在本地創建版本庫,進行拉取、提交、推送等操做。java
首先貼出maven依賴git
<dependency> <groupId>org.eclipse.jgit</groupId> <artifactId>org.eclipse.jgit</artifactId> <version>3.7.0.201502260915-r</version> </dependency>
固然還能夠使用其餘版本的依賴,大體操做都同樣。服務器
而後就是代碼中的操做了eclipse
首先聲明一些常量,而後在本地創建版本庫maven
//定義本地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倉庫 而後就是拉取遠程的文件了ide
//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 Set<String> missing=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<String> 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; } }
而後寫個方法測試一下spa
public static void main(String[] args) { setupRepo(); pullBranchToLocal(); commitFiles(); }
若有問題,歡迎留言插件