[英]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.