2010-09-04 179 views
5

有沒有一種方法以編程方式從Java遠程git存儲庫下載單個文件?從遠程git存儲庫獲取單個文件

  1. 我更喜歡使用盡可能少帶寬的解決方案,最好只下載該單個文件。我不需要瀏覽存儲庫,我已經有了文件的路徑。
  2. 我更喜歡不依賴於其他應用程序的解決方案(例如,在機器上安裝另一個git客戶端)。包含git客戶端實現本身的Java庫將是最優的。

我能夠做到用SVNKit顛覆類似的東西,我已經看到有一個純Java實現的Git(eclipse's JGit),這也許能夠做同樣的事情,所以我希望有一個積極的答案;但從我瞭解git的工作原理 - 只允許從本地存儲庫進行更新 - 這可能證明是有問題的。

+0

據我所知,jgit仍在努力提供git的所有功能 - 它不可能提供git不具備的功能。 – Cascabel 2010-09-04 13:28:40

+0

我不認爲這在一般情況下是可能的,也就是說,您只能通過git協議訪問。我不相信普通的傳輸機制提供任何方式來訪問單個文件。我相當肯定你必須在遠程(例如gitweb)上安裝某些東西,或者通過文件系統訪問一個repo(遠程或本地的,可能是淺的克隆)。 – Cascabel 2010-09-04 13:33:20

回答

8

git並非真的專爲單一文件訪問而設計遠程存儲庫,但您可以濫用git archive。缺點是你必須下載一個「樹」,而不是隻需要你需要的blob。

E.g.

git archive --remote=url://to.git.repo branch path/to/dir | tar -x file 

作爲替代方案,如果您有叫做gitweb設置上,你可以使用一個簡單的捲曲或wget命令下載任何文件在其「原始」格式的遠程倉庫。

+0

這是一個真棒kludge。 – Cascabel 2010-09-04 14:11:42

+2

請注意,對於'git://'協議,我記得,明確地啓用適當的服務來允許遠程的'git archive'訪問。 – 2010-09-06 19:34:12

+0

'path/to/dir'是什麼? – 2014-02-19 23:31:51

0

答曰git-clone(1)

--depth深度

與截斷到指定 號修訂的歷史 創建一個淺克隆。一個淺倉庫有一個 限制的數量(你不能克隆或從中獲取數據,也不能從 或 進入),但如果你只對一個歷史悠久的大型項目的歷史記錄感興趣, ,並且想要 發送修補程序作爲修補程序。

所以粒度是一個目錄,但您可以限制修訂歷史記錄。

+1

您也可以使用'--no-checkout'來避免創建整個工作目錄。沒有帶寬效應,但節省了大量的文件創建。 – Cascabel 2010-09-04 13:29:31

3

對遠程存儲庫有什麼樣的訪問權限?它是通過SSH,你可以調用命令?如果是這樣,你可以調用git show HEAD:$path_to_file

如果您無法在該機器上調用命令,仍然完全可以這樣做,但您必須瞭解Git存儲庫格式。 (這比聽起來更可怕,因爲它的設計非常簡單,與Subversion不同,存儲庫格式並不是一個黑匣子。)

+0

如果你可以在遠程運行gitweb,你也可以通過它來完成。 – Cascabel 2010-09-04 13:22:24

相關問題