How do I download a specific git commit from a repository?

前端 未结 8 2194
北海茫月
北海茫月 2020-12-15 06:10

I don\'t have a local code copy/etc, I just want to download a single specific git commit so I can view it. I have the url for the git repository:

git://git.kernel.o

相关标签:
8条回答
  • 2020-12-15 06:16
    git show COMMITID
    

    But you have to clone the repo. No way around that, I think. But you can do a shallow clone using the --depth arg.

    Also, found a good SO post that covers this topic in greater depth Browse and display files in a git repo without cloning

    0 讨论(0)
  • 2020-12-15 06:16

    I was in the same need. I need to download a patch of a specific commit which I need to apply onto another branch.

    I used: git format-patch sha-id

    Just specify the sha-id which is just older than the required commit. It will give .patch files corresponding to the all commits.

    0 讨论(0)
  • 2020-12-15 06:23

    In this case, if all you want is the diff, you can download it from the web frontend for the kernel repo at this url:

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

    You can play with the url to get other commits.

    0 讨论(0)
  • 2020-12-15 06:28

    This would appear to be impossible. According to a discussion on kernel.org, the protocol will only allow named refs to be fetched. If you don't wish to download the snapshot from the git website, you'll have to clone the entire repo.

    (You may wish to read the manuals for git-fetch and git-ls-remote.)

    0 讨论(0)
  • 2020-12-15 06:29

    In the general case, you can do this using the --remote flag to git archive, like so:

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

    So in your example, you'd use:

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

    That'll give you the state of the repo at that point in time. Note that you won't get the whole repo, so you can't actually interact with the upstream repo with what you've downloaded.

    However, using git archive remotely has to be enabled server-side, and it isn't on the Linux kernel's Git server. You can, however, grab a copy by using a URL of the form http://git.kernel.org/?p=<path to repo>;a=snapshot;h=<commit id>;sf=tgz. So for your repo, you could use, say, wget or curl to grab the file using that URL.

    0 讨论(0)
  • 2020-12-15 06:34

    I ran in to this problem today, and have found a way to download archives for a specific commit. If you go to a repository on git.kernel.org there is a clone section on the bottom. The bottom url is a google git mirror. You will be able do download archives for specific commits from here.

    0 讨论(0)
提交回复
热议问题