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

时间:2010-09-13 03:31:10

标签: git

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

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

和提交哈希:

ee9c5cfad29c8a13199962614b9b16f1c4137ac9

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

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

9 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:13)

在一般情况下,您可以使用--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形式的网址抓取副本。因此,对于您的repo,您​​可以使用wget或curl来使用该URL获取文件。

答案 2 :(得分:2)

我知道当你拥有repo(或类似的repo)的克隆时,这是有效的。

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

获取下载远程引用(但不是整个仓库,我不认为),以便您可以使用其他命令引用它们。然后你挑选那个提交,它会尝试将diff应用到你的本地树。

我没有在本地没有git repo的情况下尝试过它,但是我已经在repos上尝试了它,而不是彼此的叉子。您可能会遇到合并冲突,但您可以手动清理它们。

答案 3 :(得分:1)

git show COMMITID

但你必须克隆回购。我想,没办法解决这个问题。但是你可以使用--depth arg。

进行浅层克隆

此外,发现了一篇很好的SO帖子,更深入地介绍了这个主题Browse and display files in a git repo without cloning

答案 4 :(得分:1)

正如@Josh Lee 中正确指出的那样,简短回答不可能

尽管如此,对于非现实情况,当您是大型仓库的所有者并且需要在新位置进行一些提交并节省一些带宽/时间来获取时,您可以创建命名引用(分支或标签)在特定提交使用网络界面,然后克隆它,例如。如果你用 temp/1 分支标记你的提交:

git clone --branch=temp/1 --depth=1 http://example.com/your-repo

这似乎是获取一些提交的最便宜的方式(就下载大小而言),前提是您具有“创建引用”对远程存储库的访问权限

答案 5 :(得分:0)

我有同样的需要。 我需要下载一个特定提交的补丁,我需要将其应用到另一个分支上。

我用过:git format-patch sha-id

只需指定早于所需提交的sha-id即可。 它将提供与所有提交相对应的.patch个文件。

答案 6 :(得分:0)

我今天遇到了这个问题,并找到了一种方法来下载特定提交的存档。如果你去git.kernel.org上的存储库,底部有一个克隆部分。底部网址是谷歌git镜像。您可以从此处下载特定提交的存档。

答案 7 :(得分:0)

有一种方法可以做到这一点:

git show ee9c5cfad29c8a13199962614b9b16f1c4137ac9 > myCommittedCode.txt

答案 8 :(得分:-1)

在这种情况下,如果你想要的只是diff,你可以从这个url的内核仓库的web前端下载它:

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

您可以使用该网址进行其他提交。

相关问题