tl; dr JGit's checkout
генерирует исключения, в то время как командная строка git checkout
работает нормально
В настоящее время я пытаюсь использовать JGit для проверки определенных ревизий из онлайн-хранилища Git на Java (для работы). Мой текущий подход (и я очень новичок в Git, исходя из фона SVN, так что это может быть неправильно):
- клонировать репозиторий во временную папку на моем жестком диске
- выяснить, какую ревизию я хочу, (я пытался использовать хэш SHA-1, а также имя ветви)
- оформить ревизию
- оттуда я буду использовать извлеченные файлы в качестве входных данных для более поздней части программы.
- оформить заказ на другую ревизию
- использовать эти файлы в качестве входных данных для другой части программы
По сути, я хочу иметь возможность обмениваться содержимым моей временной папки с любой ревизией. С помощью интерфейса командной строки я смог сделать это с 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 status
, хотя я не уверен, почему эти изменения есть, и они возвращаются каждый раз, когда я переключаюсь в основную ветку , Несмотря на это, я все еще могу успешно изменить рабочее дерево с помощью командной строки Git.
Итак, мой вопрос: Почему JGit не будет работать для этого приложения, когда будет работать git из командной строки?
Любая другая полезная информация приветствуется - обучите меня :) 1036 *
Обновление Я тестировал с репозиторием jQuery и заметил еще несколько проблем с JGit: когда я работаю с веткой "master", git status
говорит мне, что я #On branch master
и что есть nothing to commit (working directory clean)
, но используя команду статуса JGit, я вижу, что test/qunit
и src/sizzle
помечены как Missing
. Сброс JGit, кажется, ничего не делает.