問題來源:最近在做一個項目,其中有一塊需要用戶上傳代碼到服務器中,然后分析用戶所傳的代碼,傳代碼最直接的方式就是用戶打個包上傳,但是后期再分析代碼的時候還要代碼實現解壓上傳的代碼,操作起來比較復雜。
解決方案
與小伙伴們討論了下,是不是可以通過代碼倉庫來解決問題,于是上網找了找,發現Git操作是可以用JGit這個API來實現的,于是就選擇了讓用戶直接給一個Github Repository的鏈接,不僅能讓系統自動下載代碼,還省去了解壓步驟。
JGit
JGit 提供了一個Git 命令的Java API,例如,你可以在 JGit 里面用
git.commit().setMessage( "My first commit" ).call();
代替
git commit -m "First commit"
JGit 命令都有一個 call() 方法,在命令被建立之后用來實際執行它。這些類的命名是在各自的 Git 命令后加上后綴命令。雖然有些命令提供一個公共構造函數,還是建議使用 Git 的工廠類來創建命令。
JGit示例
Java實現
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);
}
}
注意點:在使用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之外,還有很多其他操作,創建一個存儲庫,從遠程獲取內容,向歷史版本中添加和刪除文件,檢查歷史操作,并最終將更改的文件推回到原始存儲庫都可以用JGit實現。大家可以參考官網的API或者JGit資源介紹。