简体   繁体   中英

JGit checkout over the same branch

I need to sequentially check out tags over a branch I created with JGit.

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

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

checkout.call();

Where key is a String which contains the name of the commit I want to checkout ( key changes in a loop). I don't want to create a branch each time I checkout as I don't need to. The following error is shown:

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)

Before this happened I was trying to checkout inside the else statement with

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

It did not throw any error but it did not checkout the tag either.

Well, it seems that using JGit in Windows may generate conflicts related to managed files sometimes. What I made for solving this recurrent issue was to execute a git clean --force followed by a git reset --hard before each git checkout <ref_name> . This was totally fine for me, as I didn't need to stage changes...

The problem was that basically after using some files (even in a read-only way), they were marked as changed (I verified it with git status ). The solution explained above implied more operations, but totally solved my problem.

For further details, refer to git documentation about these actions:

  • Git clean : Removes untracked files from the working tree.
  • Git reset : Resets current HEAD to the specified state.

And develop the appropiate implementation of these two actions with JGit:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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