我正在處理ANT任務,它調用一些使用JGit在git存儲庫上創建新分支並將其推送到遠程的java。我正在使用JGit 2.1.0。JGit創建新的本地分支並推送到遠程(分支不存在於遠程)
下面的代碼:
CreateBranchCommand bcc;
CheckoutCommand checkout;
Git git;
try {
Repository repo = new FileRepositoryBuilder().readEnvironment().findGitDir(src).build();
git = new Git(repo);
bcc = git.branchCreate();
checkout = git.checkout();
} catch (IOException e) {
throw new BuildException("Could not access repository " + src, e);
}
try {
bcc.setName(branch)
.setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM)
.setStartPoint("origin/" + branch)
.setForce(force)
.call();
checkout.setName(branch);
checkout.call();
}
} catch (Exception e) {
throw new BuildException("Could not checkout repository " + src, e);
}
的SRC變量設置到GIT回購的路徑(其已經被克隆)。 的分支變量設置爲:release_2_0_2 的力變量設置爲:真正或假(既我有這個問題)。
之後有一個單獨的ANT任務來執行推送。
當運行上面的代碼中的異常被捕獲在第二陷阱:
org.eclipse.jgit.api.errors.RefNotFoundException: Ref origin/release_2_0_2 can not be resolved
這個問題似乎是與setStartPoint("origin/" + branch)
如果我硬編碼這「起源/主」它的工作原理。新的分支被創建。我只是試圖在本地創建一個新的分支,然後將其推送到遠程。我以https://stackoverflow.com/a/12928374/1860867爲例。
也許我誤解了CreateBranchCommand應該如何使用,我見過的所有例子都將起始點設置爲"origin/" + branch
。 任何建議/澄清將有所幫助。
感謝您的信息和澄清。我認爲問題是我試圖使用的代碼只能用於現有的遠程分支。我可以使用一個標誌來指示分支不存在於遠程,然後使用你的邏輯。 – ptha
很高興幫助。我發現寫下實現目標所需的本機Git命令序列並將它們翻譯成JGit API調用有時很有用。 –