Google Code Prettify

2015年10月22日 星期四

JGit - 基本命令

上一篇之後,這一篇說明一些 git 基本命令所對應的 API。在開始正式內容前,先說明一下我的環境,在我的電腦裡,有兩個目錄,分別為 D:/TestJGit/local 及 D:/TestJGit/remote,第一個目錄是 git repository 第二個是 bare repository,是第一個 repository 的遠端。
  • git init
File file = new File("D:/TestJGit/local");
Git git = Git.init().setDirectory(file).call();
git.close();
這個指令要注意,檔案系統中要已存在該目錄,才可以在該目錄建立 git repository。
  • git init --bare
Git git = Git.init().setDirectory(file).setBare(true).call();
setBare 預設是 false,所以第一個程式沒有呼叫這個 method,要建立 bare repository 只要如上呼叫 setBare 並傳入 true 即可。
  • git add
File file = new File("D:/TestJGit/local/.git");
Git git = Git.open(file);
AddCommand addCmd = git.add().addFilepattern("folder_1/local_d.txt");
addCmd.call();
git.close();
git 是分散式的版本控管,不管是要存取 local 或 remote 端,都先開啟 local 端的 git repository,要注意上面開始的是真正 git 的檔案所在的目錄 (.git),另一個要注意的是,要加入的檔案,是以 D:/TestJGit/local 目錄開始往下看,所以上面的檔案的完整路徑是 D:/TestJGit/local/folder_1/local_d.txt,不過,傳入時一定要如上傳相對路徑。
  • git commit
CommitCommand commitCmd = git.commit().setMessage("add a、b、d");
commitCmd.call();
  • git push
PushCommand pushCmd = git.push().setRemote("origin");
pushCmd.call();
只要牽涉到 remote 端,就有認證的問題,照理說要呼叫 setCredentialsProvider,這裡沒有呼叫這個 method,是因為我的 remote 端也在自己電腦的硬碟裡。(setCredentialsProvider 的用法請參考上一篇)
  • git clone
File file = new File("D:/TestJGit/remote");
Git git = Git.open(file);
CloneCommand cloneCmd = git.cloneRepository()
    .setBare(false)
    .setBranch("refs/remotes/origin/master")
    .setURI("D:/TestJGit/remote")
    .setDirectory(new File("D:/TestJGit/local3"));
cloneCmd.call();
git.close();
這裡要注意的是,開啟 remote 端的 bare repository,目錄名稱不是 .git 子目錄,事實上 bare repository 也沒有這個子目錄,這裡傳入 local repository 也可以。另外,setURI 是傳入 remote 端的路徑 (網址),setDirectory 則傳入 local repository 的路徑。
  • git pull
File file = new File("D:/TestJGit/local3/.git");
Git git = Git.open(file);
PullCommand pullCmd = git.pull();
pullCmd.setRemote("origin");
pullCmd.call();
git.close();
  • git rm
RmCommand rmCmd = git.rm().addFilepattern("local_a.txt");
rmCmd.call();
  • git diff
DiffCommand diffCmd = git.diff();
List<DiffEntry> diffEntry = diffCmd.call();
for(DiffEntry en:diffEntry) {
    System.out.println(en.toString());
}
這裡比對的是 working directory 和 最後一次 commit 間的差異,更深入的待下一篇說明。



沒有留言:

張貼留言