如何从GitHub上托管的远程Git repo中仅下载特定文件夹或目录?

举个GitHub repo的例子:

git@github.com:foobar/Test.git

其目录结构:

Test/
├── foo/ 
│   ├── a.py
│   └── b.py   
└── bar/
    ├── c.py
    └── d.py

我只想下载foo文件夹,而不是克隆整个测试项目。


当前回答

在要加载的目录中:

git init
git remote add origin -f repoUrl // folder url
touch .git/info/sparse-checkout
git pull origin master

只有4行代码

其他回答

为了放大上面的答案,一个从真正的GitHub存储库到本地目录的真实示例是:

svn ls https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces

svn export https://github.com/rdcarp/playing-cards/trunk/PumpkinSoup.PlayingCards.Interfaces  /temp/SvnExport/Washburn

有时,一个具体的例子有助于澄清所提出的替代方案。

我们的团队为此编写了一个bash脚本,因为我们不想在我们的裸机服务器上安装SVN。

https://github.com/ojbc/docker/blob/master/java8-karaf3/files/git-download.sh

它使用github API,可以从如下命令行运行:

git-download.sh https://api.github.com/repos/ojbc/main/contents/shared/ojb-certs

这些答案对我的处境都没有帮助。如果您是为Windows开发的,您可能没有svn。在许多情况下,用户也不能指望安装Git,或者因为其他原因不想下载整个存储库。回答这个问题的一些人,如威廉·范·凯维奇和阿兹塔克,制作了完成这项任务的工具。然而,如果该工具不是为您所使用的语言编写的,或者您不想安装第三方库,这些都不起作用。

然而,有一种更简单的方法。GitHub有一个API,允许您使用GET请求下载单个文件或整个目录的内容。您可以使用https://api.github.com/repos/:owner/:repo_name/contents/:path返回枚举目录中所有文件的JSON对象。枚举中包含指向文件原始内容download_url参数的链接。然后可以使用该URL下载该文件。

这是一个两步的过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现。它可以用于获取文件或目录。

只需5步

从这里下载SVN。打开CMD并转到SVN bin目录,如:cd%ProgramFiles%\SlikSvn\bin假设我想下载这个目录URLhttps://github.com/ZeBobo5/Vlc.DotNet/tree/develop/src/Samples代替树/开发或树干的树/主现在启动最后一个命令以下载同一目录中的文件夹。

svn export https://github.com/ZeBobo5/Vlc.DotNet/trunk/src/Samples

如果你真的只想“下载”文件夹,而不想“克隆”它(用于开发),那么最简单的方法就是简单地获取存储库的最新版本的副本(以及其中的文件夹/文件),而无需首先克隆整个存储库,甚至安装git,下载zip存档(对于任何repo、fork、branch、commit等),方法是转到GitHub上所需的存储库/fork/branch/commit(例如,http://GitHub.com/<user>/<repo>/commit/<Sha1>,获取文件副本,如同在特定提交后一样),然后选择右上方的下载按钮。

这种存档格式不包含任何git repo魔法,只包含被跟踪的文件本身(如果它们被跟踪的话,可能还有几个.gitignore文件,但你可以忽略它们:p)-这意味着如果代码发生变化,并且你想保持在顶部,你必须手动重新下载它,这也意味着你不能将其用作git存储库。。。

不确定在这种情况下,这是否是您想要的(再次,“下载”/查看vs“克隆”/开发),但它仍然很有用。。。