2013-01-17 112 views
0

我试图从Git中检索文件的单个修订版本。我做了一些调查,发现最好的方法是git show HEAD[x]:[filename],其中[x]是从上一次修订版本向后退订版,[filename]是该文件的名称。我的代码看起来像这样(在Java中):从进程输出中读取二进制文本和文本

public static String runProcess2(String executable, String parameter) { 
    try { 
     Runtime rt = Runtime.getRuntime(); 
     String path = String.format("%s %s", executable, parameter); 
     Process pr = rt.exec(path); 

     BufferedReader input = new BufferedReader(new InputStreamReader(
       pr.getInputStream())); 

     String line = null; 

     StringBuilder sb = new StringBuilder(); 

     while ((line = input.readLine()) != null) { 
      sb.append(line + NL); 
     } 

     pr.waitFor(); 
     return sb.toString(); 

    } catch (Exception e) { 
     return null; 
    } 
} 

我与这行代码运行:

return Utilities.runProcess("git", String.format(
       "--git-dir=%s\\.git --work-tree=%s show HEAD%s:%s", path, path, 
       rev, filePath)); 

这非常适用于文本文件。但是在存储库中有二进制文件。如果我运行这个代码,它会破坏文件。 (再次,这适用于文本文件)。如何从存储库中检索二进制文件和文本文件(使用任何内容编码)的文件内容?

我认为我用于读取输出的方法不够一般。

+1

a)将'git'命令的输出重定向到临时文件,然后从文件 中读取数据b)获取一些Java的GIT绑定并使用本地Java代码访问repo内容 –

+1

您是否考虑过使用jgit? – fge

+0

@ zed_0xff我喜欢你的两个想法。 –

回答

0

你不应该用BufferedReader读取二进制数据。 您应该使用函数来读取二进制文件。 在这种情况下,您需要知道尺寸。