【问题标题】:Calling git from Java with command line使用命令行从 Java 调用 git
【发布时间】:2014-04-30 08:15:31
【问题描述】:

当尝试从 Java 调用在普通命令行中正确执行的 git 命令时,我得到一个奇怪的结果:它什么也不输出。

例如,如果我尝试运行这个:

public class GitTest {
    public static void main(String args[]) throws IOException{
        String command = "git clone http://git-wip-us.apache.org/repos/asf/accumulo.git";
        Process p = Runtime.getRuntime().exec(command);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line; 
        String text = command + "\n";
        System.out.println(text);
        while ((line = input.readLine()) != null) {
            text += line;
            System.out.println("Line: " + line);
        }
    }
}

我没有得到任何输出(除了之前打印的命令)。似乎 git 仍在下载某些东西,但没有告诉我。也许它会在完成后输出所有内容(因此正常的 git 调用输出,准备了多少,并且每次都更改此行 - 可能正因为如此 BufferedReader 无法读取完成的行,因此不输出它)。

有什么变通方法可以让它工作吗?

【问题讨论】:

    标签: java git


    【解决方案1】:

    您需要检查 git clone 的部分(或大部分)输出是否在 stdout 或 stderr (it is the case, for instance, for git push) 上。

    如果是后者,请参阅this example 以读取 stdout 和 stderr。

    并为命令的参数使用数组(就像我在“Runtime.getRuntime().exec()”中所做的那样)。
    另见Invoking Processes from Java

    【讨论】:

    • 谢谢,StreamGobbler 做到了。
    【解决方案2】:

    如果你绝对需要运行命令行git,你可以考虑使用JavaGit(它可能有点过时了)。但目前从 Java 中管理 Git 存储库的推荐方法是使用 JGit - Git 存储的纯 Java 实现。 Eclipse EGit 插件建立在 JGit 之上

    【讨论】:

      猜你喜欢
      • 2010-09-27
      • 2021-06-02
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多