Java 是否使用JGit访问现有克隆?

Java 是否使用JGit访问现有克隆?,java,git,jgit,Java,Git,Jgit,我的计算机上已经有一个存储库的克隆。我希望创建一个Java程序,当它打开时拉,当它关闭时推 我就是这样开始的: auth = new UsernamePasswordCredentialsProvider("[username]", "[pass]"); git = Git.open(new File(path_to_git + "\\.git")); git.checkout().setName("master").call(); git.pull().setCredentialsPro

我的计算机上已经有一个存储库的克隆。我希望创建一个Java程序,当它打开时拉,当它关闭时推

我就是这样开始的:

auth = new UsernamePasswordCredentialsProvider("[username]", "[pass]");

git = Git.open(new File(path_to_git + "\\.git"));

git.checkout().setName("master").call();

git.pull().setCredentialsProvider(auth).call();
这在我第一次启动时起作用,但是如果我关闭并重新打开程序,就会出现错误

Exception in thread "JavaFX Application Thread" Exception in thread "main" java.lang.ExceptionInInitializerError
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplicationWithArgs$2(LauncherImpl.java:352)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$7(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$5(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$6(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$4(WinApplication.java:186)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.UnsupportedOperationException: Cannot check out from unborn branch
    at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:235)
    at com.company.app.Main.<clinit>(Main.java:59)
    ... 11 more

每当我运行程序时,我都需要删除本地回购协议并重新克隆它

您可以尝试以下示例代码片段

Git git = Git.cloneRepository()
  .setURI( "https://github.com/someRepoName" )
  .setDirectory( "/path/to/repo" )
  .setBranch( "refs/heads/master" )
  .call();
有关更多详细信息,请参阅下面的链接。

在JGITAPI的更高版本中,您可以使用
CloneCommand
,您可以查看下面的链接


您可以尝试使用以下示例代码段

Git git = Git.cloneRepository()
  .setURI( "https://github.com/someRepoName" )
  .setDirectory( "/path/to/repo" )
  .setBranch( "refs/heads/master" )
  .call();
有关更多详细信息,请参阅下面的链接。

在JGITAPI的更高版本中,您可以使用
CloneCommand
,您可以查看下面的链接


如果JGit找不到
HEAD
ref,则会引发异常。是否
Git.open
引用现有存储库?@Rüdigerhermann是的,它首先工作。但当我关闭程序(即运行问题中的第二个代码段)时,它会“破坏”repo。在那之后,我找不到
HEAD
ref。你是否尝试一步一步地禁用
pushToGit
中的调用,以找出哪一个“破坏”了你的存储库?如果JGit找不到
HEAD
ref,则会引发异常。是否
Git.open
引用现有的存储库?@Rüdigerrmann是的,它首先会工作。但当我关闭程序(即运行问题中的第二个代码段)时,它会“破坏”repo。在这之后,我找不到
标题
参考。您是否尝试一步一步禁用
pushToGit
中的调用,以找出哪一个“破坏”了您的存储库?我尝试过这一方法,但如果目录已经包含克隆的repo,则该方法无效。我发现错误
目标路径“[repo]”已经存在并且不是空目录
,作为解决办法,您可以删除文件夹中的.git目录以再次克隆。但如果文件夹包含.git目录,则无法再次克隆,可以执行拉取操作。这就是概念。我理解,但我不想每次运行程序时都删除
.git
文件夹。
pushToGit
函数中的某些内容正在“破坏”repo,因为我在运行该函数后发现上面的错误。我尝试过这个方法,但如果目录中已经包含克隆的repo,它就不起作用。我发现错误
目标路径“[repo]”已经存在并且不是空目录
,作为解决办法,您可以删除文件夹中的.git目录以再次克隆。但如果文件夹包含.git目录,则无法再次克隆,可以执行拉取操作。这就是概念。我理解,但我不想每次运行程序时都删除
.git
文件夹。
pushToGit
函数中的某些东西正在“破坏”回购协议,因为我在运行它之后,得到了上面的错误。