JGit checkout vs`git checkout`问题

Dyl*_*lan 8 java git jgit

tl;博士 JGit checkout在命令行git checkout正常工作时抛出异常

我目前正在尝试使用JGit从Java(用于工作)检查来自在线Git存储库的某些修订.我目前的方法是(我对Git很新,来自SVN背景,所以这可能是错的):

  • 将存储库克隆到我的硬盘驱动器上的临时位置
  • 找出我想要的版本,(我尝试过使用SHA-1哈希以及分支的名称)
  • 结帐该修订版
  • 从那里,我将使用签出的文件作为程序后期部分的输入.
  • 结帐不同的修订版
  • 使用这些文件作为程序另一部分的输入

基本上,我希望能够将临时文件夹的内容与任何修订版交换.使用命令行界面我已经能够使用git checkout mastergit 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
Run Code Online (Sandbox Code Playgroud)

并且打印到控制台的例外:

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
Run Code Online (Sandbox Code Playgroud)

我可以验证有问题的文件是否被标记为已删除,而不是通过使用进行提交,git status虽然我不确定为什么会有这些更改,并且它们会在我切换回主分支时返回.尽管如此,我仍然可以使用命令行Git成功更改工作树.

所以我的问题:为什么JGit在命令行git时不能用于这个应用程序?感谢任何其他有用的信息 - 教育我:)

更新我一直在使用jQuery存储库进行测试,并注意到JGit的一些问题:当我使用"master"分支时,git statustemms me我就是#On branch master那个nothing to commit (working directory clean),但是使用JGit的状态命令我看到了那test/qunitsrc/sizzle标记为Missing.JGit的重置似乎什么都不做.

Kev*_*cki 2

堆栈跟踪中提到的两个目录是Git 子模块test/qunitsrc/sizzle),这很可能是问题的原因,因为 JGit 尚不具备完整的子模块支持。

根据此提交,在本月发布的 1.1 JGit 版本中,这可能会有不同的功能。

您可以在此处阅读有关 JGit 子模块支持当前状态的更多信息。