2013-01-17 144 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讀取二進制數據。 您應該使用函數來讀取二進制文件。 在這種情況下,您需要知道尺寸。