首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JGit结帐与JGit检验问题

JGit结帐与JGit检验问题
EN

Stack Overflow用户
提问于 2011-09-16 15:36:10
回答 3查看 7.5K关注 0票数 8

tl;JGit博士的checkout抛出异常,而命令行git checkout工作正常

目前,我正试图使用JGit来查看来自Java在线存储库的某些版本(用于工作)。我目前的方法是(我对Git非常陌生,来自SVN背景,所以这可能是错误的):

  • 将存储库复制到我硬盘上的临时位置。
  • 找出我想要的修订(我已经尝试过使用SHA-1散列以及分支的名称)。
  • 检查该修订版
  • 从那里开始,我将使用签出的文件作为程序后面部分的输入。
  • 签出不同的修订版
  • 将这些文件用作程序的另一部分的输入。

本质上,我希望能够用任何版本交换临时文件夹的内容。通过命令行接口,我能够使用git checkout mastergit checkout dylanbranch (其中dylan支是我在自己的克隆上使用任意选择的修订版创建的分支)来实现这一点,但是我的Java代码试图做同样的事情失败了:

代码语言:javascript
复制
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

以及输出到控制台的异常:

代码语言:javascript
复制
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/qunitsrc/sizzle被标记为Missing。JGit的重置似乎什么都没做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-20 21:56:37

堆栈跟踪中提到的两个目录是Git子模 (test/qunitsrc/sizzle),这很可能是问题的原因,因为JGit还没有完全的子模块支持。

在本月基于这个JGit发布的1.1 提交版本中,这可能会有不同的功能。

您可以更多地了解JGit子模块支持这里的当前状态。

票数 2
EN

Stack Overflow用户

发布于 2011-09-16 17:49:54

我知道这并不能直接回答您的问题,但我在Git的Java实现方面也遇到了问题。对我来说,最有效的方法就是抛弃java实现,从应用程序中执行对git的命令行调用。它可能并不理想,但它可以完全按照您的要求执行,因为您将完全控制该命令。

只需调用Runtime.getRuntime().exec(...)

链接到运行时类的Javadoc

票数 0
EN

Stack Overflow用户

发布于 2011-11-17 18:16:00

我在结账方面也有类似的问题。我认为,在Git中切换不分阶段内容的分支实际上是一种容忍,而不是一种特性。JGit在全球范围内不像Git那样宽容,所以您通常应该测试许多情况。

看起来这并不是直接的问题(这与子模块有关),但是对于更一般的情况,您可能希望在使用签出切换到另一个分支之前提交您的更改。

请注意,CheckoutCommand非常适合我从旧版本启动一个新分支(您必须设置分支和开始修订的名称)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7447097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档