tl;JGit博士的checkout抛出异常,而命令行git checkout工作正常
目前,我正试图使用JGit来查看来自Java在线存储库的某些版本(用于工作)。我目前的方法是(我对Git非常陌生,来自SVN背景,所以这可能是错误的):
本质上,我希望能够用任何版本交换临时文件夹的内容。通过命令行接口,我能够使用git checkout master和git checkout dylanbranch (其中dylan支是我在自己的克隆上使用任意选择的修订版创建的分支)来实现这一点,但是我的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,我可以验证所讨论的文件是否被标记为已删除,而不是分阶段提交,尽管我不知道为什么会有这些更改,而且每当我切换回主分支时,它们都会回来。尽管如此,我仍然可以使用命令行Git成功地更改工作树。
所以我的问题是:为什么命令行git不能为这个应用程序工作?任何其他有用的信息都很感激--教育我:)
更新--我一直在用jQuery存储库进行测试,并且注意到了JGit的一些问题:当我使用“主”分支时,git status会告诉我我是#On branch master,还有nothing to commit (working directory clean),但是使用JGit的status命令,我看到test/qunit和src/sizzle被标记为Missing。JGit的重置似乎什么都没做。
发布于 2011-09-20 21:56:37
发布于 2011-09-16 17:49:54
我知道这并不能直接回答您的问题,但我在Git的Java实现方面也遇到了问题。对我来说,最有效的方法就是抛弃java实现,从应用程序中执行对git的命令行调用。它可能并不理想,但它可以完全按照您的要求执行,因为您将完全控制该命令。
只需调用Runtime.getRuntime().exec(...)
链接到运行时类的Javadoc
发布于 2011-11-17 18:16:00
我在结账方面也有类似的问题。我认为,在Git中切换不分阶段内容的分支实际上是一种容忍,而不是一种特性。JGit在全球范围内不像Git那样宽容,所以您通常应该测试许多情况。
看起来这并不是直接的问题(这与子模块有关),但是对于更一般的情况,您可能希望在使用签出切换到另一个分支之前提交您的更改。
请注意,CheckoutCommand非常适合我从旧版本启动一个新分支(您必须设置分支和开始修订的名称)。
https://stackoverflow.com/questions/7447097
复制相似问题