我正在尝试从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));
这适用于文本文件。但是,存储库中有二进制文件。如果我运行此代码,它会以某种方式破坏文件。 (再次,这适用于文本文件)。如何从存储库中检索二进制文件和文本文件(使用任何内容编码)的文件内容?
我认为用于读取输出的方法不够通用。