2010-09-13 98 views
18

我沒有本地代碼複製/ etc,我只想下載一個特定的git提交,以便我可以查看它。我有一個Git倉庫的網址:如何從存儲庫下載特定的git提交?

git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git

,並提交哈希:

ee9c5cfad29c8a13199962614b9b16f1c4137ac9 

如何下載眼前這個承諾使用Git(我不希望整個回購,只是一個提交補丁)?我已經閱讀了git-pull和git-cherry-pick的man頁面,並且沒有運氣就用命令弄亂了。

克隆回購確實不是一種選擇,因爲一些內核存儲庫非常大,下載速度很慢(小時)。

+0

您是否嘗試過瀏覽[通過網絡這個回購(http://git.kernel.org/?p=linux/kernel/git/davem /net-2.6.git;a=commit;h=ee9c5cfad29c8a13199962614b9b16f1c4137ac9)? – bstpierre 2010-09-14 21:34:42

+1

我想從命令行執行它的原因有多種(速度/效率和腳本是主要的)。 – bigredbob 2010-09-18 08:34:14

+3

一個提交實質上是一個差異。你想查看差異還是查看樹? – Daenyth 2010-09-25 18:38:14

回答

21

這似乎是不可能的。根據kernel.org上的discussion,該協議將只允許獲取命名參考。如果你不想從git網站上下載快照,你必須克隆整個repo。

(您不妨閱讀手冊git-fetchgit-ls-remote。)

11

這個話題在一般情況下,你可以做到這一點使用--remote標誌git archive,像這樣:

$ git archive -o repo.tar --remote=<repo url> <commit id> 

所以在你的例子中,你會使用:

$ git archive -o repo.tar --remote=git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git ee9c5cfad29c8a13199962614b9b16f1c4137ac9 

這會給你在該時間點回購的狀態。請注意,您將無法獲得整個回購協議,因此您無法使用所下載的內容實際與上游回購協議進行交互。

但是,遠程使用git archive必須啓用服務器端,並且不在Linux內核的Git服務器上。但是,您可以使用http://git.kernel.org/?p=<path to repo>;a=snapshot;h=<commit id>;sf=tgz格式的URL來獲取副本。因此,對於您的回購,您可以使用wget或curl來使用該URL抓取文件。

+1

不幸的是,這種方法不可靠/可編寫腳本(如果有的話,某些git回收站並不容易找到web界面)。 – bigredbob 2010-09-25 17:10:21

+0

確實如此,但在您的具體情況下,它會起作用。 – mipadi 2010-09-27 14:53:20

+1

它應該工作,除了網上的東西是動態生成的。 ?'捲曲HTTP的結果:; A =快照; H = ee9c5cfad29c8a13199962614b9b16f1c4137ac9; //git.kernel.org/ P = LINUX /內核/ GIT中/ DAVEM /淨2.6.git SF = tgz'是'生成.. 。' – wlangstroth 2010-09-27 16:03:22

-1

在這種情況下,如果你想要的就是把差異,您可以從網絡前端在這個網址內核回購下載:

http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=commitdiff_plain;h=ee9c5cfad29c8a13199962614b9b16f1c4137ac9 

你可以玩網址來獲得其他提交。

2

我知道,當你有回購的克隆(或類似的回購)的作品..

git fetch git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git 
git cherry-pick ee9c5cfad29c8a13199962614b9b16f1c4137ac9 

獲取下載遠程裁判(而不是整個回購協議,我不認爲),所以你可以用其他命令引用它們。然後你選擇一個提交,並試圖將diff應用到你的本地樹。

我沒有git倉庫還沒有嘗試過在本地,但我已經嘗試過在不是海誓山盟的叉回購。您可能會遇到合併衝突,但您可以手動清理這些衝突。

+0

只有在您進行櫻桃採摘時纔會有效,這是回購HEAD的祖先。 – 2012-10-16 01:37:20

+0

我剛剛試過這個--- git fetch'嘗試下載所有東西。 – 2014-12-11 20:53:56

0

我是在同樣的需要。 我需要下載我需要應用到另一個分支上的特定提交的補丁。

我用:git format-patch sha-id

只要指定的sha-id這僅僅是比所需提交舊的。 它會給出與所有提交相對應的.patch文件。

0

我今天跑了這個問題,並且已經找到了一種方法來下載檔案爲特定承諾。如果你去git.kernel.org的倉庫,底部有一個克隆部分。底部的網址是一個谷歌git鏡像。您將能夠從這裏下載特定提交的存檔。

0

有一種方法可以做到這一點:

git show ee9c5cfad29c8a13199962614b9b16f1c4137ac9 > myCommittedCode.txt 
相關問題