簡體   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