JGit checkout vs `git checkout` problems

tl;dr JGit's checkout выбрасывает исключения, пока проверка git'а из командной строки работает нормально

В настоящее время я пытаюсь использовать JGit для извлечения определённых ревизий из онлайн-репозитория Git'а, на Java (для работы). Мой текущий подход (и я очень новичок в Git'е, исходя из SVN-фона, так что это может быть неправильно):

  • клонировать репозиторий во временное место на моём жёстком диске
  • выяснить, какую ревизию я хочу, (я пытался использовать SHA-1 хэш, а также имя ветки)
  • извлечь эту ревизию
  • оттуда, я буду использовать извлечённые файлы в качестве входных данных для более поздней части программы.
  • checkout a different revision
  • use those files as inputs to other part of the program

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'а, кажется, ничего не делает.

8
задан Dylan 16 September 2011 в 17:37
поделиться