tl;drコマンドラインが正常に動作している間にJGitcheckout
が例外をスローするgit checkout
現在、JGit を使用して、Java でオンライン Git リポジトリから特定のリビジョンをチェックアウトしようとしています (仕事用)。私の現在のアプローチは次のとおりです(そして、私はSVNのバックグラウンドから来たGitに非常に慣れていないため、これは間違っている可能性があります):
- ハードドライブの一時的な場所にリポジトリをクローンします
- 必要なリビジョンを見つけます (SHA-1 ハッシュとブランチの名前を使用してみました)
- そのリビジョンをチェックアウトする
- そこから、チェックアウトしたファイルをプログラムの後半への入力として使用します。
- 別のリビジョンをチェックアウトする
- これらのファイルをプログラムの別の部分への入力として使用する
基本的に、一時フォルダーの内容をどのリビジョンとも交換できるようにしたいと考えています。コマンド ライン インターフェイスを使用するとgit checkout master
、and git checkout dylanbranch
(dylanbranch は、任意に選択したリビジョンで自分のクローンに作成したブランチです) を使用してこれを行うことができましたが、同じことをしようとした Java コードは失敗します。
Git git = Git.open(new File("checkout")); //checkout is the folder with .git
git.checkout().setName("master").call(); //succeeds
git.checkout().setName("dylanbranch").call(); //fails
そして、コンソールに出力された例外:
Exception in thread "main" org.eclipse.jgit.api.errors.JGitInternalException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:211)
at com.avi.scm.git.BranchCheckout.main(BranchCheckout.java:30)
Caused by: org.eclipse.jgit.errors.CheckoutConflictException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:387)
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:162)
... 1 more
問題のファイルが削除済みとしてマークされ、コミットのためにステージングされてgit status
いないことを確認できますが、これらの変更が存在する理由はわかりませんが、マスター ブランチに戻るといつでも戻ってきます。それにもかかわらず、コマンド ライン Git を使用して作業ツリーを正常に変更できます。
私の質問:コマンドライン git が機能するのに、なぜこのアプリケーションで JGit が機能しないのですか? その他の役立つ情報は大歓迎です-教えてください:)
更新私はjQueryリポジトリでテストしており、JGitでさらにいくつかの問題に気付きました.「マスター」ブランチで作業しているとき、私はgit status
私がいて#On branch master
、そこにあると思いますがnothing to commit (working directory clean)
、JGitのステータスコマンドを使用するとわかりますそのtest/qunit
とsrc/sizzle
は としてマークされていMissing
ます。JGit のリセットは何もしないようです。