gpt4 book ai didi

java - JGit checkout 与 `git checkout` 问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:17 34 4
gpt4 key购买 nike

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

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

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

本质上,我希望能够将我的临时文件夹的内容与任何版本交换。通过命令行界面,我已经能够使用 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

并将异常打印到控制台:

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 成功更改工作树。

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

更新 我一直在测试 jQuery 存储库,并注意到 JGit 的更多问题:当我使用“master”分支时,git status 让我知道我是 #On branch master 并且没有没有要提交的(工作目录干净),但是使用 JGit 的状态命令我看到了 test/qunitsrc/sizzle 被标记为 Missing。 JGit 的重置似乎什么都不做。

最佳答案

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

这在本月发布的 1.1 JGit 版本中可能会有所不同,基于此 commit .

您可以阅读更多关于 JGit 子模块支持的当前状态 here .

关于java - JGit checkout 与 `git checkout` 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7447097/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com