繁体   English   中英

在同一分支上的JGit结帐

[英]JGit checkout over the same branch

我需要在通过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是一个String ,其中包含我要检出的提交的名称(循环中的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)

在发生这种情况之前,我尝试使用

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

它没有引发任何错误,但是也没有签出标签。

好吧,似乎在Windows中使用JGit有时可能会产生与托管文件有关的冲突。 我为解决此反复出现的问题所做的工作是在每次git checkout <ref_name>之前执行git clean --force然后执行git reset --hard 这对我来说完全没问题,因为我不需要进行更改...

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM