tl; JGit博士在命令行工作正常checkout
时抛出异常git checkout
我目前正在尝试使用 JGit 从 Java 中的在线 Git 存储库中检查某些修订(用于工作)。我目前的方法是(我对 Git 很陌生,来自 SVN 背景,所以这可能是错误的):
- 将存储库克隆到我硬盘上的临时位置
- 找出我想要的版本,(我尝试使用 SHA-1 哈希以及分支名称)
- 签出该修订版
- 从那里,我将使用签出的文件作为程序稍后部分的输入。
- 签出不同的修订
- 使用这些文件作为程序另一部分的输入
本质上,我希望能够将我的临时文件夹的内容与任何修订版交换。使用命令行界面,我已经能够使用git checkout master
and来执行此操作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)
,但是使用 JGit 的状态命令我看到那test/qunit
和src/sizzle
被标记为Missing
。JGit 的重置似乎什么也没做。