問題來源:最近在做一個項目,其中有一塊需要用戶上傳代碼到服務(wù)器中,然后分析用戶所傳的代碼,傳代碼最直接的方式就是用戶打個包上傳爬舰,但是后期再分析代碼的時候還要代碼實(shí)現(xiàn)解壓上傳的代碼,操作起來比較復(fù)雜寒瓦。
解決方案
與小伙伴們討論了下情屹,是不是可以通過代碼倉庫來解決問題,于是上網(wǎng)找了找杂腰,發(fā)現(xiàn)Git操作是可以用JGit這個API來實(shí)現(xiàn)的垃你,于是就選擇了讓用戶直接給一個Github Repository的鏈接,不僅能讓系統(tǒng)自動下載代碼喂很,還省去了解壓步驟惜颇。
JGit
JGit 提供了一個Git 命令的Java API,例如少辣,你可以在 JGit 里面用
git.commit().setMessage( "My first commit" ).call();
代替
git commit -m "First commit"
JGit 命令都有一個 call() 方法凌摄,在命令被建立之后用來實(shí)際執(zhí)行它。這些類的命名是在各自的 Git 命令后加上后綴命令漓帅。雖然有些命令提供一個公共構(gòu)造函數(shù)锨亏,還是建議使用 Git 的工廠類來創(chuàng)建命令。
JGit示例
Java實(shí)現(xiàn)
git clone
操作忙干,參考代碼如下:
import java.io.File;
import org.eclipse.jgit.api.CloneCommand;
import org.eclipse.jgit.api.Git;
public class JGitUtil {
public static String cloneRepository(String url,String localPath)
{
try{
System.out.println("開始下載......");
CloneCommand cc = Git.cloneRepository().setURI(url);
cc.setDirectory(new File(localPath)).call();
System.out.println("下載完成......");
return "success";
}catch(Exception e)
{
e.printStackTrace();
return "error";
}
}
public static void main(String[] args)
{
String localPath = "/Users/XXX/Desktop/GitTest";
String url = "https://github.com/XXX/python3-webapp.git";
cloneRepository(url,localPath);
}
}
注意點(diǎn):在使用JGit這個JAR包時器予,是依賴其他JAR包的;列舉如下:
slf4j-api-1.7.9.jar
slf4j-log4j12-1.7.9.jar
log4j-1.2.17.jar
jsch-0.1.54.jar
除了git clone之外捐迫,還有很多其他操作乾翔,創(chuàng)建一個存儲庫,從遠(yuǎn)程獲取內(nèi)容施戴,向歷史版本中添加和刪除文件反浓,檢查歷史操作,并最終將更改的文件推回到原始存儲庫都可以用JGit實(shí)現(xiàn)赞哗。大家可以參考官網(wǎng)的API或者JGit資源介紹勾习。