Java JGit在同一分支上签出

Java JGit在同一分支上签出,java,jgit,Java,Jgit,我需要在用JGit创建的分支上按顺序签出标记 CheckoutCommand checkout = new Git(testRepository).checkout(); if (!branchExists()) checkout.setCreateBranch(true).setName("branch-for-test").setStartPoint(key); else checkout.setName(key); checkout.call(); 其中,key是一个

我需要在用JGit创建的分支上按顺序签出标记

CheckoutCommand checkout = new Git(testRepository).checkout();

if (!branchExists())
    checkout.setCreateBranch(true).setName("branch-for-test").setStartPoint(key);
else
    checkout.setName(key);

checkout.call();
其中,
key
是一个
字符串
,它包含我要签出的提交的名称(
key
循环中的更改)。我不想每次结账时都创建一个分支,因为我不需要这样做。显示以下错误:

org.eclipse.jgit.api.errors.JGitInternalException: Could not rename file target\TestRepository\server\db\scripts\postgresql\._db_script.sql6197897692249726905.tmp to target\TestRepository\server\db\scripts\postgresql\_db_script.sql
        at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:320)
在这之前,我试图在else语句中使用

checkout.setName("branch-for-test").setStartPoint(key);

它没有抛出任何错误,但也没有签出标记。

嗯,在Windows中使用JGit有时可能会产生与托管文件相关的冲突。我为解决这个反复出现的问题所做的是在每次
git签出之前执行
git clean--force
,然后执行
git reset--hard
。这对我来说很好,因为我不需要舞台上的变化

问题是,基本上在使用了一些文件(即使是只读的)之后,它们被标记为已更改(我用
git status
验证了它)。上面解释的解决方案意味着更多的操作,但完全解决了我的问题

有关更多详细信息,请参阅有关这些操作的git文档:

  • :从工作树中删除未跟踪的文件
  • :将当前磁头重置为指定状态
并与JGit一起制定这两项行动的适当实施方案:

  • 用清洁剂清洁
  • 重置为

  • branchExists()做什么?它是否检查名为测试分支的分支是否存在?如果是这样的话,创建分支可以移动到循环之外,对吗?目的是验证分支是否已经创建,在这种情况下,我想在现有分支中签出签出到同一分支中应该可以工作。您应该找到“无法重命名”异常的原因。您是否在引发异常的行(或之前)上设置了断点以查看发生了什么情况(例如,目标文件是否存在等)?很抱歉回答得这么晚。存在无法重命名的临时文件。