当前位置: 首页 > 知识库问答 >
问题:

Jgit中“pull”命令的使用

元俊雅
2023-03-14

我是git的新用户,正在使用JGit与远程git存储库进行交互。在JGit中,我最初使用<code>CloneCommand</code>来克隆回购,并且它没有问题。但是,当我尝试使用<code>PullCommand

这是我使用的代码:

private String localPath;
private Repository localRepo;
private Git git;

localPath = "/home/test/git_repo_test";
remotePath = "https://github.com/test/repo_1.git";

try {
    localRepo = new FileRepository(localPath + "/.git");
} catch (IOException e) {
    e.printStackTrace();  
}
git = new Git(localRepo);

PullCommand pullCmd = git.pull();
try {
    pullCmd.call();
} catch (GitAPIException e) {
    e.printStackTrace();  
}

这不会为我已使用命令行推送到远程存储库的新文件更新本地存储库。但是,如果我删除本地存储库并再次克隆,则会反映所有更改。

请让我知道在JGit中使用PullCommand的正确方法是什么。

编辑:

远程存储库的结构:

root ____ file_1
  |______ directory_1
              |__________ file_2 
              |__________ file_3

directory_1,两个文件在初始克隆后从命令行推送,我尝试了此代码,以便它将反映在本地存储库中,这并没有发生。

用于克隆存储库的代码:

File file = new File(localPath);
CloneCommand cloneCmd = git.cloneRepository();
try {
    cloneCmd.setURI(remotePath)
            .setDirectory(file)
            .call();
} catch (GitAPIException e) {
    e.printStackTrace();  
}

在这里,gitlocalPathremotePath是与上面相同的变量。

共有3个答案

顾乐池
2023-03-14

我遇到了同样的问题。对我来说,解决方案是在克隆后设置git config文件:

CloneCommand cloneCommand = Git.cloneRepository();
cloneCommand.setURI("<repo-uri>");
cloneCommand.setDirectory("<repo-dir>");
cloneCommand.call();

Git git = Git.open("<repo-dir>");
StoredConfig config = git.getRepository().getConfig();
config.setString("branch", "master", "merge", "refs/heads/master");
config.setString("branch", "master", "remote", "origin");
config.setString("remote", "origin", "fetch", "+refs/heads/*:refs/remotes/origin/*");
config.setString("remote", "origin", "url", "<repo-uri>");
config.save();

拉动时,我将远程分支名称设置为“master”,将远程分支设置为“origin”:

java prettyprint-override">PullCommand pull = git.pull();
pull.setRemote("origin");
pull.setRemoteBranchName("master");

拉动后的这些变化,我看到了局部反映的变化。

莘欣怿
2023-03-14

文档中提到了<code>Git<code>类的构造函数如下:

构造一个可以与指定git存储库交互的新Git对象。此类方法返回的所有命令类将始终与此git存储库交互。

因此,正如我所建议的,你必须将远程回购的路径传递给构造函数,现在你正试图从本地回购中提取。

田硕
2023-03-14

我怀疑问题是当前分支没有上游配置(因此拉不会合并获取的分支)。

要查看拉取过程中发生了什么,请检查pullCmd.call()的结果:

PullResult result = pullCmd.call();
FetchResult fetchResult = result.getFetchResult();
MergeResult mergeResult = result.getMergeResult();
mergeResult.getMergeStatus();  // this should be interesting
 类似资料:
  • 主要内容:描述,示例命令用于从另一个存储库或本地分支获取并集成(整合)。命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并,它的完整格式稍稍有点复杂。 使用语法 描述 将远程存储库中的更改合并到当前分支中。在默认模式下,是后跟的缩写。 更准确地说,使用给定的参数运行,并调用将检索到的分支头合并到当前分支中。 使用,它运行而不是。 示例 以下是一些示例 - 比如,要取回主机的分支,与本地的分支合并,需要写

  • 问题内容: 我有以下git命令: 有可能在JGit中实现吗? 如果是,那么用JGit编写的等效方法是什么? 问题答案: 要访问存储库的历史记录,JGit提供了。它的方法用于指定历史记录应从哪个提交开始。存储库中的所有引用都可以通过获取。 一旦一个实例设置,使用它的迭代器或它的方法来遍历的历史。 放在一起看起来像这样: 请注意,调用的实例必须与调用的实例相同。否则,将会产生有趣的结果。 提交(并由此

  • 我在本地回购中做了很多更改,包括删除了数千个文件,并进行了数百次更改。与此同时,我对另一台计算机进行了文件同步(只是无法访问internet),然后继续创建数千个文件,删除数千个文件,并进行数百次更改。现在回购协议运行良好,因为我从后来使用的计算机上更新了它,但当我想拉到以前的计算机上时,这就变成了一场噩梦。。。显然,我必须手动签出我删除或更改的所有文件,并恢复到最后一个头部,然后再拉。。。是否有

  • 有没有一种方法可以下载Docker映像/容器,例如,使用Firefox,而不使用内置的。 我被公司防火墙和代理屏蔽了,我无法通过它得到一个洞。 我的问题是我不能使用Docker获取图像,即Docker保存/拉取和其他Docker提供的功能,因为它被防火墙阻止了。

  • 本文向大家介绍PHP的命令行命令使用指南,包括了PHP的命令行命令使用指南的使用技巧和注意事项,需要的朋友参考一下  当用户打开php页面时,服务端便执行PHP的命令并将执行结果发送至用户的浏览器中,这类似于ASP和CoildFusion,PHP可以运行在WINDOWS和多种版本的UNIX上。除了能够操作您的页面外,PHP还能发送HTTP的标题。 你可以设置cookie,管理数字签名和重定向用户,

  • 问题内容: 我试图在我的Mac OS X 10.9.5上启动并运行mysql。我已经安装了最新版本的 社区服务器。我已经进入系统偏好设置并启动了mysql服务器,然后启动了终端并输入了以下内容: 返回版本,但是当我键入任何类型的mysql命令时,我都会得到。我也试过,。 我确实安装了带有mysql等的虚拟主机,但是我希望能够首先在命令行中掌握它。 问题答案: 因此,终端在很少的地方寻找命令。此位置