- 創建 Repository、Git
Repository repo = new FileRepositoryBuilder() .setGitDir(new File("D:/BitBucket/VersionControl/.git")) .build(); Git git = new Git(repo);
我的電腦中有一個目錄 D:/BitBucket/VersionControl,這是一個 git repository,在 BitBucket 這個網站上,有相對應的的一個 git bare repository,在創建 Repository 物件時,路徑指到本機的路徑,至於怎麼存取遠端的 bare repository 內的資料稍後說明。不管是 Repository 類別或 Git 類別,使用完都要呼叫 close() method,以關閉 I/O 連線。
- 取得 remote name
Set<String> remoteNames = repo.getRemoteNames();
- 取得本機 branch
ListBranchCommand branchCmd = git.branchList();
List<Ref> branch = branchCmd.call();
使用 Git 類別時,只要想想 git 有提供那些指令,大至上就可以找到相對的 method,上面的程式會取得 branch 的參考物件 (Ref),如果用 toString() 把它輸出,會如下:
Ref[refs/heads/TEST=e5dc4bc8a01cca3c74a3554f87857d468815b58b] Ref[refs/heads/master=977a0b74fe3e49c166119d473f2415663e158260]
輸出的格式為 Ref[name=objectId],這表示如果我們要操作 branch,就可以透過這個方式取得 name 或 objectId 帶入其它 method 來操作 branch。
- 取得遠端 branch
Collection<Ref> lsRemote = git.lsRemote() .setCredentialsProvider(cp) .call(); for(Ref remote:lsRemote) { String objName = remote.getName(); Ref localRef = repo.getRef(objName); System.out.println("local ref = " + localRef.toString()); Ref remoteRef = remote.getTarget(); System.out.println("remote ref = " + remoteRef.toString()); }要取得遠端的物件,當然要認證,這裡採用帳號、密碼登入的方式,輸出會如下:
local ref = SymbolicRef[HEAD -> refs/heads/TEST=e5dc4bc8a01cca3c74a3554f87857d468815b58b] remote ref = Ref[HEAD=6c248c9ae67bdf1fc65e3d5cc8110a5c017aba53] local ref = Ref[refs/heads/master=977a0b74fe3e49c166119d473f2415663e158260] remote ref = Ref[refs/heads/master=6c248c9ae67bdf1fc65e3d5cc8110a5c017aba53] local ref = Ref[refs/heads/TEST=e5dc4bc8a01cca3c74a3554f87857d468815b58b] remote ref = Ref[refs/heads/TEST=b6c238f6a641b4272dc0728a9db0ddd93690ce64]
可以看到,local 和 remote 的 object id 不同,對照直接下 git ls-remote 的輸出,就可以發現,上面的 remote ref 與 ls-remote 的輸出是一樣的。
沒有留言:
張貼留言