JGit通过.git文件连接到单独的git存储库



我使用了"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)

如何连接到我的存储库?

谢谢你的帮助。

编辑:

感谢Joni为我的问题找到了解决方案。

谢谢Joni!你太棒了!我试过了,就像你写的一样设置工作树,它就像一个魅力。顺便说一下,我发现在不知道回购位置的情况下执行这些步骤的选项。对于那些被采访的人:

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(); 
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();

最新更新