Java 是否使用JGit访问现有克隆?
我的计算机上已经有一个存储库的克隆。我希望创建一个Java程序,当它打开时拉,当它关闭时推 我就是这样开始的: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
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
函数中的某些东西正在“破坏”回购协议,因为我在运行它之后,得到了上面的错误。