2012-09-27 153 views
4

我正在使用以下代碼從github簽出存儲庫。JGit分支結帳問題

private String url = "https://github.com/organization/project.git"; 
    Git repo = Git.cloneRepository().setURI(url).setDirectory(directory).setCloneAllBranches(true).call(); 
    for (Ref b : repo.branchList().call()) { 
     System.out.println("(standard): cloned branch " + b.getName()); 
    } 

我使用的代碼

Git git = Git.open(checkout); //checkout is the folder with .git 
git.pull().call(); //succeeds 

如果我chekout分支

Git git = Git.open(new File(checkout)); //checkout is the folder with .git 
System.out.println(git.getRepository().getFullBranch()); 
CheckoutCommand checkout = git.checkout(); 
Ref call = checkout.setName("kalees").call(); 

它拋出org.eclipse.jgit.api.errors.RefNotFoundException:參考kalees不能解決。

這裏有什麼問題,如果我指定「大師」,而不是「kalees」它工作正常。我應該做些什麼來結帳一個特定的分支?

如果我使用的代碼

git.checkout().setCreateBranch(true).setName("refs/remotes/origin/kalees"); 

它檢出kalees分支。但是當我做拉操作

git.pull().call(); 

它拋出org.eclipse.jgit.api.errors.DetachedHeadException:HEAD是分離。可能是什麼,無論這是結帳問題還是拉問題?

回答

3

如果它應該只發生:

  • kalees是不是現有的分支(或不正確地寫入,不好的情況下)
  • kalees是一個遠程分支您避風港跟蹤尚未AA當地分支機構

如果是這樣,您可能需要先創建它(有點像this example

git.branchCreate().setForce(true).setName("kalees").setStartPoint("origin/kalees").call(); 

繼「JGit: Cannot find a tutorial or simple example」,我寧願使用:

git.branchCreate() 
     .setName("kalees") 
     .setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM) 
     .setStartPoint("origin/kalees") 
     .setForce(true) 
     .call(); 
+0

@ kaleeswaran14不知道這是有幫助的。也許'.setForce(true)'在這裏很重要? – VonC

+0

@ kaleeswaran14我編輯了答案以包含更精確的示例。 – VonC

+0

@ kaleeswaran14您可以檢出遠程分支,只要您根據該結帳創建本地分支(否則您處於分離頭模式,這是您的情況)。 – VonC

1

我遇到了這個問題,當我想創建一個分支與空庫,沒有在這個倉庫提交。

當我向存儲庫提交某些內容時已解決。希望對你:)

0

MUTHU你的代碼工作,你只需要像這樣添加產地/分支的分支呼叫

Ref call = checkout.setName("origin/kalees").call();