代码之家  ›  专栏  ›  技术社区  ›  bigredbob

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

git
  •  19
  • bigredbob  · 技术社区  · 16 年前

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

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

    ee9c5cfad29c8a13199962614b9b16f1c4137ac9
    

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

    8 回复  |  直到 16 年前
        1
  •  23
  •   Josh Lee ZZ Coder    16 年前

    这似乎是不可能的。据一位 discussion 在内核.org,协议将只允许提取命名的引用。如果您不想从git网站下载快照,则必须克隆整个repo。

    (您可能希望阅读以下手册: git-fetch 和 git-ls-remote .)

        2
  •  13
  •   mipadi    16 年前

    在一般情况下,可以使用 --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存档 远程必须在服务器端启用,而且它不在Linux内核的Git服务器上。但是,您可以使用表单的URL获取副本 http://git.kernel.org/?p=<path to repo>;a=snapshot;h=<commit id>;sf=tgz . 因此,对于repo,可以使用wget或curl来使用该URL获取文件。

        3
  •  2
  •   araemo    14 年前

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

    Fetch下载远程ref(但我不认为是整个repo),以便您可以用其他命令引用它们。然后,您选择一个提交,它尝试将diff应用于本地树。

    我在本地没有git回购协议的情况下没有尝试过,但我在不是分叉的回购协议上尝试过。可能会出现合并冲突,但可以手动清除这些冲突。

        4
  •  1
  •   Community Mohan Dere    9 年前
    git show COMMITID
    

    但你必须复制回购协议。我想没办法。但是你可以用--depth参数做一个浅层克隆。

    另外,找到一个很好的SO职位,涵盖这个主题更深入 Browse and display files in a git repo without cloning

        5
  •  1
  •   maoizm    5 年前

    正如在@Josh Lee答案中正确指出的,简短的答案是 不可能 .

    尽管如此 不是非现实生活 当您是大型回购的所有者,需要在新位置进行一些提交并节省一些带宽/时间来提取时,您可以使用web界面在特定提交处创建命名的ref(分支或标记),然后克隆它,例如,如果您将提交标记为 temp/1

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

    这似乎是获取提交的最便宜的方法(就下载大小而言),前提是您拥有 “创建引用”

        6
  •  0
  •   Jorri Fransen    10 年前

    我今天遇到了这个问题,找到了一种方法来下载特定提交的归档文件。如果您在上转到存储库git.kernel.org网站底部有一个克隆部分。下面的url是googlegit镜像。您可以从这里下载特定提交的档案。

        7
  •  0
  •   kenorb    10 年前

    我也有同样的需要。 我需要下载一个补丁的具体承诺,我需要申请到另一个分支。

    git format-patch sha-id

    只需指定 sha-id 它会给你 .patch 所有提交对应的文件。

        8
  •  -1
  •   kenorb    10 年前

    在这种情况下,如果您只需要diff,可以从内核repo的web前端下载它,网址为:

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

    您可以使用url来获得其他提交。

        9
  •  -1
  •   David    9 年前

    git show ee9c5cfad29c8a13199962614b9b16f1c4137ac9 > myCommittedCode.txt