tl;dr JGit's checkout
выбрасывает исключения, пока проверка git'а из командной строки работает нормально
В настоящее время я пытаюсь использовать JGit для извлечения определённых ревизий из онлайн-репозитория Git'а, на Java (для работы). Мой текущий подход (и я очень новичок в Git'е, исходя из SVN-фона, так что это может быть неправильно):
Essentially, I want to be able to swap the content of my temp folder with whatever whateverver revision. С помощью интерфейса командной строки я смог сделать это с помощью git checkout master
и 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 статус
, хотя я не уверен, зачем эти изменения, и они возвращаются в любой момент, когда я переключаюсь обратно в главную ветку. Несмотря на это, я всё равно могу успешно изменить рабочее дерево с помощью командной строки Git'а.
Итак, мой вопрос: Почему JGit не будет работать для этого приложения, когда git из командной строки? Любая другая полезная информация ценится - просветите меня :)
Update Я тестировал с репозиторием jQuery и заметил ещё несколько проблем с JGit'ом: Когда я работаю с веткой "master", git статус
заставляет меня думать, что я #On branch master
и что нет ничего для фиксации (рабочий каталог чистый)
, но используя команду статуса JGit, я вижу, что test/qunit
и src/sizzle
помечены как Missing
. Сброс JGit'а, кажется, ничего не делает.