如何从GitHub上托管的远程Git repo中仅下载特定文件夹或目录?
举个GitHub repo的例子:
git@github.com:foobar/Test.git
其目录结构:
Test/
├── foo/
│ ├── a.py
│ └── b.py
└── bar/
├── c.py
└── d.py
我只想下载foo文件夹,而不是克隆整个测试项目。
如何从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行代码
其他回答
这些答案对我的处境都没有帮助。如果您是为Windows开发的,您可能没有svn。在许多情况下,用户也不能指望安装Git,或者因为其他原因不想下载整个存储库。回答这个问题的一些人,如威廉·范·凯维奇和阿兹塔克,制作了完成这项任务的工具。然而,如果该工具不是为您所使用的语言编写的,或者您不想安装第三方库,这些都不起作用。
然而,有一种更简单的方法。GitHub有一个API,允许您使用GET请求下载单个文件或整个目录的内容。您可以使用https://api.github.com/repos/:owner/:repo_name/contents/:path返回枚举目录中所有文件的JSON对象。枚举中包含指向文件原始内容download_url参数的链接。然后可以使用该URL下载该文件。
这是一个两步的过程,需要能够发出GET请求,但这可以在任何平台上以几乎任何语言实现。它可以用于获取文件或目录。
如果您有svn,可以使用svn导出来执行以下操作:
svn export https://github.com/foobar/Test.git/trunk/foo
请注意URL格式:
基本URL为https://github.com//末尾附加的树干
在运行svn导出之前,最好先使用以下命令验证目录的内容:
svn ls https://github.com/foobar/Test.git/trunk/foo
如果你真的只想“下载”文件夹,而不想“克隆”它(用于开发),那么最简单的方法就是简单地获取存储库的最新版本的副本(以及其中的文件夹/文件),而无需首先克隆整个存储库,甚至安装git,下载zip存档(对于任何repo、fork、branch、commit等),方法是转到GitHub上所需的存储库/fork/branch/commit(例如,http://GitHub.com/<user>/<repo>/commit/<Sha1>,获取文件副本,如同在特定提交后一样),然后选择右上方的下载按钮。
这种存档格式不包含任何git repo魔法,只包含被跟踪的文件本身(如果它们被跟踪的话,可能还有几个.gitignore文件,但你可以忽略它们:p)-这意味着如果代码发生变化,并且你想保持在顶部,你必须手动重新下载它,这也意味着你不能将其用作git存储库。。。
不确定在这种情况下,这是否是您想要的(再次,“下载”/查看vs“克隆”/开发),但它仍然很有用。。。
您可以简单地下载目录树:
git archive --remote git@github.com:foobar/Test.git HEAD:foo | tar xf -
但如果你想检查一下,并且能够提交并将它们推回去,那么你就不能这样做。
我找到的最简单的方法是如何仅克隆Git存储库的子目录?
我在gitclone命令中添加了-b<branch>--singlebranch以下载特定的分支。所以我使用的命令是:
git clone --depth 1 --single-branch -b <branch> --filter=blob:none --sparse <url>
git sparse-checkout set <directory>