如何从存储库下载特定的git提交?

big*_*bob 19 git

我没有本地代码副本/ etc,我只想下载一个特定的git提交,以便我可以查看它.我有git存储库的url:

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

和提交哈希:

ee9c5cfad29c8a13199962614b9b16f1c4137ac9
Run Code Online (Sandbox Code Playgroud)

我如何使用git下载这个提交(我不想要整个repo,只需要一个提交补丁)?我已经阅读了git-pull和git-cherry-pick的手册页,并且在没有运气的情况下摆弄了这些命令.

克隆存储库确实不是一种选择,因为某些内核存储库非常大且下载速度慢(小时).

Jos*_*Lee 21

这似乎是不可能的.根据kernel.org 上的讨论,该协议将只允许获取命名引用.如果您不想从git网站下载快照,则必须克隆整个仓库.

(您可能希望阅读git-fetchgit-ls-remote的手册.)


mip*_*adi 13

在一般情况下,您可以使用--remote标志来执行此操作git archive,如下所示:

$ git archive -o repo.tar --remote=<repo url> <commit id>
Run Code Online (Sandbox Code Playgroud)

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

$ git archive -o repo.tar --remote=git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git ee9c5cfad29c8a13199962614b9b16f1c4137ac9
Run Code Online (Sandbox Code Playgroud)

那将在那个时间点给你回购状态.请注意,您将无法获得整个仓库,因此您无法实际与上载的仓库进行交互.

但是,git archive必须在服务器端启用远程使用,并且它不在Linux内核的Git服务器上.但是,您可以使用表单的URL来获取副本http://git.kernel.org/?p=<path to repo>;a=snapshot;h=<commit id>;sf=tgz.因此,对于您的repo,您​​可以使用wget或curl来使用该URL获取文件.

  • 不幸的是,这种方法并不可靠/无法编写脚本(并且一些 git 存储库根本没有容易找到的 Web 界面)。 (2认同)