How to sparsely checkout only one single file from a git repository?

前端 未结 21 1617
Happy的楠姐
Happy的楠姐 2020-11-22 08:14

How do I checkout just one file from a git repo?

21条回答
  •  长发绾君心
    2020-11-22 08:57

    Originally, I mentioned in 2012 git archive (see Jared Forsyth's answer and Robert Knight's answer), since git1.7.9.5 (March 2012), Paul Brannan's answer:

    git archive --format=tar --remote=origin HEAD:path/to/directory -- filename | tar -O -xf -
    

    But: in 2013, that was no longer possible for remote https://github.com URLs.
    See the old page "Can I archive a repository?"

    The current (2018) page "About archiving content and data on GitHub" recommends using third-party services like GHTorrent or GH Archive.


    So you can also deal with local copies/clone:

    You could alternatively do the following if you have a local copy of the bare repository as mentioned in this answer,

    git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file >file
    

    Or you must clone first the repo, meaning you get the full history: - in the .git repo - in the working tree.

    • But then you can do a sparse checkout (if you are using Git1.7+),:
      • enable the sparse checkout option (git config core.sparsecheckout true)
      • adding what you want to see in the .git/info/sparse-checkout file
      • re-reading the working tree to only display what you need

    To re-read the working tree:

    $ git read-tree -m -u HEAD
    

    That way, you end up with a working tree including precisely what you want (even if it is only one file)


    Richard Gomes points (in the comments) to "How do I clone, fetch or sparse checkout a single directory or a list of directories from git repository?"

    A bash function which avoids downloading the history, which retrieves a single branch and which retrieves a list of files or directories you need.

提交回复
热议问题