#java #git #jgit
#java #git #jgit
Вопрос:
Я использовал "git init --separate-git-dir=C:/repo/.git"
и определил другое местоположение для репозитория. Мое рабочее местоположение "C:/work/"
.
В рабочем расположении git создает .git-file
со ссылкой на местоположение репозитория.
Когда я использую JGit, я не могу подключиться к своему репозиторию:
Git
.open(new File("C:\work\.git"))
.reset()
.setMode(ResetType.HARD)
.call();
Затем я получаю исключение:
Exception in thread "main" org.eclipse.jgit.errors.RepositoryNotFoundException: repository not found: C:work.git
at org.eclipse.jgit.lib.BaseRepositoryBuilder.build(BaseRepositoryBuilder.java:582)
at org.eclipse.jgit.api.Git.open(Git.java:117)
at org.eclipse.jgit.api.Git.open(Git.java:99)
at de.test.git.App.main(App.java:20)
Как подключиться к моему репозиторию?
Спасибо за помощь.
Редактировать:
Спасибо Джони, который нашел решение моей проблемы.
Спасибо, Джони! Ты потрясающий! Я попробовал это, как вы написали, с настройкой рабочего дерева, и это работает как шарм. Кстати, я нашел возможность выполнить эти шаги, не зная, где находится репозиторий. Для тех, кто интересуется:
Repository repo = new FileRepositoryBuilder()
.findGitDir(new File("C:\work"))
.setWorkTree(new File("C:\work"))
.build();
Git git = new Git(repo);
git
.reset()
.setMode(ResetType.HARD)
.call();
git.close();
Комментарии:
1. Вы уверены, что правильно клонировали свой репозиторий в
C:work
? Можете ли вы подтвердить другим инструментом, что он согласован? Также, пожалуйста, попробуйтеnew File("C:\work")
и позвольте JGit самому обнаружить ваш.git
каталог2. Я не клонировал репозиторий. Я создал с помощью git init новый локальный репозиторий и с помощью —separate-git-dir привязал к местоположению репозитория. В моем рабочем месте есть только .git-файл (не репозиторий). Я пытался
new File("C:\work")
, но это тоже не сработало.3. Когда я использую Git Bash в Windows на рабочем месте, я могу использовать
git reset --hard
, в то время как Git Bash также может подключаться к репозиторию. Только JGit не может подключиться к репозиторию через связанный «.git-файл».
Ответ №1:
Похоже, что JGit (пока) не поддерживает эту --separate-git-dir
опцию.
В качестве обходного пути вы можете напрямую открыть связанный репозиторий:
Git
.open(new File("C:/repo/.git"))
.reset()
.setMode(ResetType.HARD)
.call();
При подобном использовании JGit не будет знать, где находится ваш рабочий каталог, поэтому я полагаю, что все, что связано с рабочим каталогом, завершится неудачей. Следуя руководству пользователя, вы можете создать настраиваемый Repository
объект, подобный этому:
FileRepositoryBuilder builder = new FileRepositoryBuilder();
Repository repository = builder.setGitDir(new File("C:/repo/.git"))
.setWorkTree(new File("C:/work"))
.readEnvironment() // scan environment GIT_* variables
.build();
А затем использует Git(Repository)
конструктор вместо Git.open
:
Git git = new Git(repository);
git.reset()
.setMode(ResetType.HARD)
.call();
Комментарии:
1. Спасибо за вашу идею! Я попытался открыть репозиторий напрямую, и это сработало. Но есть другая проблема. При сбросе рабочее местоположение не будет сброшено. Будет сброшен только сам репозиторий, и git вставит сброшенные файлы в расположение репозитория относительно .git-directory.
2. Спасибо, Джони! Ты потрясающий! Я попробовал это, как вы написали, с настройкой рабочего дерева, и это работает как шарм. Кстати, я нашел возможность выполнить эти шаги, не зная, где находится репозиторий. Для тех, кто интересуется: « Repository repo = new FileRepositoryBuilder() .findGitDir(новый файл(«C:\work «)) .setWorkTree(новый файл(«C:\work «)) .build(); Git git = новый Git(репозиторий); git.reset().setMode(resetType.HARD).call(); git.close(); «