2014-07-01 133 views
0

我想要使用JGit獲取特定分支的所有提交。
我們以test-kitchen爲例。它有5個分支:遍歷所有分支

  • 規格覆蓋
  • 傳統-0.7
  • sethvargo /文檔
  • sethvargo/full_chef_path

我怎樣才能通過spec-coverage重複例如只要?

在這個例子中,我會得到所有可用的分支和提交。但我需要選擇我想要提交的分支。

提取物:

// branch 
for (Ref branch : git.branchList().setListMode(ListMode.REMOTE).call()){ 
    git.checkout().setName(branch.getName()).call(); 
    System.out.println("Branch: " + branch.getName()); 

    // commits 
    Iterable<RevCommit> commits = git.log().all().call(); 
    for (RevCommit commit : commits) { 
     System.out.println(commit); 
     // doing something with the commits... 
    } 
} 
+0

定義「迭代」?向後走向提交歷史記錄?多遠? –

+0

例如獲取特定分支的所有提交。 – user1170330

回答

0

根據您的描述您正在嘗試做的「混帳日誌相當於」時,jgit-cookbook有一個片段,展示瞭如何遍歷所有提交你這樣做,但在這種情況下,您可以選擇通過添加(),而不是所有的()只在提交的分支迭代列出分支的所有提交:

Iterable<RevCommit> logs = new Git(repository).log() 
      .add(repository.resolve("remotes/origin/checkoutbranch")) 
      .call(); 
    for (RevCommit rev : logs) { 
     ... 
    } 

現在我也更新了jgit-食譜片段來顯示在log()上使用all()的差異。

+0

當我用例如'spec-coverage'替換'checkoutbranch'時,我會遇到'Caught Exception:Ref spec-coverage can not be resolved'。 我正在一個遠程分支上工作。我必須設置其他參數嗎? – user1170330

+0

對於遠程分支,您可能需要首先讓它們在本地可用,但據我看到,jgit中的遠程命令在這裏功能不夠強大......不知道命令行git甚至可以做到這一點嗎? – centic

+0

'setListMode(ListMode.REMOTE)'或類似的東西呢? – user1170330