JGit在同一分支上结账

时间:2015-11-27 16:30:50

标签: 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();

其中keyString,其中包含我要签出的提交的名称(循环中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);

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

1 个答案:

答案 0 :(得分:2)

好吧,似乎在Windows中使用JGit有时可能会产生与托管文件相关的冲突。我为解决这个经常性问题所做的是在每个git clean --force之前执行git reset --hard后跟git checkout <ref_name>。这对我来说完全没问题,因为我不需要改变......

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

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

  • Git clean:从工作树中删除未跟踪的文件。
  • Git reset:将当前HEAD重置为指定状态。

用JGit开发这两个动作的适当实现: