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