git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* git download
@ 2022-11-23 17:17 Vasilij Demyanov
  2022-11-23 19:14 ` Jacob Keller
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Vasilij Demyanov @ 2022-11-23 17:17 UTC (permalink / raw)
  To: git

Hello everybody!

I have a need to get just one file from a repository, it would be
useful to have a command something like this:

git download repo_url branch_or_commit path/to/file

Or maybe there is something like this, I just haven't found it in the docs?

Best regards,
Vasyl

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: git download
  2022-11-23 17:17 git download Vasilij Demyanov
@ 2022-11-23 19:14 ` Jacob Keller
  2022-11-24 16:52 ` Sean Allred
  2022-11-25  6:06 ` ZheNing Hu
  2 siblings, 0 replies; 6+ messages in thread
From: Jacob Keller @ 2022-11-23 19:14 UTC (permalink / raw)
  To: Vasilij Demyanov; +Cc: git

On Wed, Nov 23, 2022 at 9:27 AM Vasilij Demyanov <qvasic@gmail.com> wrote:
>
> Hello everybody!
>

Hi,

> I have a need to get just one file from a repository, it would be
> useful to have a command something like this:
>

Ok.

> git download repo_url branch_or_commit path/to/file
>
> Or maybe there is something like this, I just haven't found it in the docs?
>

So this isn't something git itself provides. Various web hosting
services for git provide such access, because they allow viewing the
repository contents. Git can't provide this easily because of the
nature of the commits and trees used to store the contents of the
repository. In order to verify that you got the correct contents, you
essentially have to fetch the commit and all its parents. You can
maybe save some download space by using a sparse clone.. but most
remote repositories may not allow arbitrary commit hash fetching.

If you already have a repository available from some computer/system
you can extract the file at a given version via something like git
cat-file:

$ git cat-file -p <commitish>:<path>

where commitish can be a branch or a commit hash, or other way to
reference a commit, and path is the path of the file.

Unfortunately you will essentially need to have cloned the repository first.

If your project is hosted somewhere using software like github,
gitlab, etc, or has gitweb-like software operating on it, you may be
able to find an API or web interface that lets you extract the
individual file without downloading the repository. This is somewhat
outside the scope of this mailing list tho.

Thanks,
Jake

> Best regards,
> Vasyl

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: git download
  2022-11-23 17:17 git download Vasilij Demyanov
  2022-11-23 19:14 ` Jacob Keller
@ 2022-11-24 16:52 ` Sean Allred
  2022-11-25  6:06 ` ZheNing Hu
  2 siblings, 0 replies; 6+ messages in thread
From: Sean Allred @ 2022-11-24 16:52 UTC (permalink / raw)
  To: Vasilij Demyanov; +Cc: git


Vasilij Demyanov <qvasic@gmail.com> writes:

> I have a need to get just one file from a repository, it would be
> useful to have a command something like this:
>
> git download repo_url branch_or_commit path/to/file

My immediate thought was git-archive[1], but depending the specifics of
your needs/setup, you could use curl/wget for this pretty simply. For
example, if you're using GitHub, you can

    curl https://raw.githubusercontent.com/git/git/master/README.md

to dump the content of the README to standard out. As another example,
to get the content of next:builtin/var.c,

    curl https://raw.githubusercontent.com/git/git/next/builtin/var.c

The general pattern:

    https://raw.githubusercontent.com/<repo>/<branch-or-commit>/<file-path>

GitLab's pattern is similar:

    https://gitlab.com/<repo>/-/raw/<branch-or-commit>/<file-path>

e.g.

    curl https://gitlab.com/gitlab-org/git/-/raw/main/README.md

This will be limited to getting a single file at a time. If you want
more, you can make more curl requests, but git-archive can give a whole
directory or even the entire repo at a specific commit. Since
git-archive outputs a tar/zip file, you'll want to combine it with your
favorite decompression tool to get your content.

[1]: https://git-scm.com/docs/git-archive

--
Sean Allred

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: git download
  2022-11-23 17:17 git download Vasilij Demyanov
  2022-11-23 19:14 ` Jacob Keller
  2022-11-24 16:52 ` Sean Allred
@ 2022-11-25  6:06 ` ZheNing Hu
  2 siblings, 0 replies; 6+ messages in thread
From: ZheNing Hu @ 2022-11-25  6:06 UTC (permalink / raw)
  To: Vasilij Demyanov; +Cc: git

Hi,

Vasilij Demyanov <qvasic@gmail.com> 于2022年11月24日周四 01:27写道:
>
> Hello everybody!
>
> I have a need to get just one file from a repository, it would be
> useful to have a command something like this:
>
> git download repo_url branch_or_commit path/to/file
>
> Or maybe there is something like this, I just haven't found it in the docs?
>

If the git server support partial-clone (uploadpack.allowFilter),
maybe you can use this way:

    git clone --depth=1 --single-branch --branch=main --no-checkout
--filter=blob:none
git@github.com:derrickstolee/sparse-checkout-example.git
    cd sparse-checkout-example
    git sparse-checkout set --no-cone "/README.md"
    git checkout main

it will only download single commit, multiple tree, and one blob.

If the server supports fetch any objects
(uploadpack.allowAnySHA1InWant) and you already know the
file's SHA1, there is a kind of black magic here:

    git init repo
    cd repo
    git remote add origin <repo>
    git -c fetch.negotiationAlgorithm=noop fetch force --no-tags
--no-write-fetch-head --filter=blob:none --stdin
    <blob-oid>

You will get only one blob, "git cat-file -p <blob-oid>" to view the
contents of this file.

Note these two performance maybe not better than git archive or some
file pages support by git server
directly such as
https://raw.githubusercontent.com/derrickstolee/sparse-checkout-example/main/README.md

> Best regards,
> Vasyl

--
ZheNing Hu

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Git download
  2017-03-05 20:26 Git download Cory Kilpatrick
@ 2017-03-06  5:33 ` Torsten Bögershausen
  0 siblings, 0 replies; 6+ messages in thread
From: Torsten Bögershausen @ 2017-03-06  5:33 UTC (permalink / raw)
  To: Cory Kilpatrick, git

On 03/05/2017 09:26 PM, Cory Kilpatrick wrote:
> I have downloaded Git and cannot find the application on my Mac. Should I try to download it again?

I don't think so.

It could be helpful if we can get some more information:

- Could you open the terminal application and type

  which git

git --version

and post the results here ?
It may be worth to mention that Git is a command line tool, so that you 
may not

see anything in the "Applications" folder.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Git download
@ 2017-03-05 20:26 Cory Kilpatrick
  2017-03-06  5:33 ` Torsten Bögershausen
  0 siblings, 1 reply; 6+ messages in thread
From: Cory Kilpatrick @ 2017-03-05 20:26 UTC (permalink / raw)
  To: git

I have downloaded Git and cannot find the application on my Mac. Should I try to download it again? 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-11-25  6:07 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-23 17:17 git download Vasilij Demyanov
2022-11-23 19:14 ` Jacob Keller
2022-11-24 16:52 ` Sean Allred
2022-11-25  6:06 ` ZheNing Hu
  -- strict thread matches above, loose matches on Subject: below --
2017-03-05 20:26 Git download Cory Kilpatrick
2017-03-06  5:33 ` Torsten Bögershausen

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).