[英]JGit checkout vs `git checkout` problems
tl; dr JGit的checkout
引發異常,而命令行git checkout
正常運行
我目前正在嘗試使用JGit從Java的在線Git存儲庫中檢出某些修訂版本(用於工作)。 我當前的方法是(而且我是Git的新手,來自SVN背景,所以這可能是錯誤的):
本質上,我希望能夠將temp文件夾的內容與任何修訂版本交換。 通過命令行界面,我已經能夠使用git checkout master
和git checkout dylanbranch
(其中dylanbranch是我在自己的克隆上創建的帶有任意選擇的修訂版的分支)中進行此操作,但是我的Java代碼試圖做同樣的事情失敗:
Git git = Git.open(new File("checkout")); //checkout is the folder with .git
git.checkout().setName("master").call(); //succeeds
git.checkout().setName("dylanbranch").call(); //fails
並將異常打印到控制台:
Exception in thread "main" org.eclipse.jgit.api.errors.JGitInternalException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:211)
at com.avi.scm.git.BranchCheckout.main(BranchCheckout.java:30)
Caused by: org.eclipse.jgit.errors.CheckoutConflictException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:387)
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:162)
... 1 more
我可以通過使用git status
來驗證是否有問題的文件被標記為已刪除,並且未暫存以提交,盡管我不確定為什么會有這些更改,並且只要我切換回master分支,它們就會回來。 盡管如此,我仍然可以使用命令行Git成功更改工作樹。
所以我的問題是:當命令行git可以運行時,為什么JGit無法在該應用程序中工作? 任何其他有用的信息表示贊賞-教育我:)
更新我一直在使用jQuery存儲庫進行測試,並注意到JGit的其他一些問題:當我使用“ master”分支時, git status
提示我我是#On branch master
,沒有nothing to commit (working directory clean)
#On branch master
nothing to commit (working directory clean)
,但是使用JGit的status命令,我看到test/qunit
和src/sizzle
被標記為Missing
。 JGit的重置似乎無濟於事。
我知道這並不能直接回答您的問題,但是Git的Java實現也遇到了問題。 對我而言,最有效的方法是簡單地放棄Java實現,並從應用程序內部執行對git的命令行調用。 它可能並不理想,但是它將完全按照您的要求進行操作,因為您將完全控制該命令。
只需調用Runtime.getRuntime().exec(...)
我在Checkout遇到了類似的問題。 我認為,可以在Git中使用未暫存的內容切換分支的事實實際上是一個容忍度,而不是功能。 JGit在全球范圍內不如Git寬容,因此您通常應該測試許多情況。
看來這不直接是您的問題(與子模塊有關),但在更一般的情況下,您希望在使用checkout切換到另一個分支之前提交更改。
請注意,CheckoutCommand對我來說非常適合從舊修訂版開始新分支(您必須設置分支的名稱和起始修訂版)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.