如何从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文件夹,而不是克隆整个测试项目。
当前回答
转到DownGit>输入您的URL>下载!
您可以直接下载或从DownGit为任何GitHub公共目录或文件创建下载链接-
您还可以配置下载文件的财产-详细用法。
免责声明:我和提问者陷入了同样的问题,无法找到任何简单的解决方案。因此,我首先开发了这个工具供自己使用,然后为每个人打开它:)
其他回答
如果要下载的目录是一个单独的库,最好创建其他git repo,然后使用git子模块函数。
当然,你必须是你想要的初始回购的所有者
其他答案没有错,但我只是想为那些第一次在这个过程中徘徊的人分享一步一步的指导。
如何从github存储库(Mac OS X)下载单个文件夹:
~要打开终端,只需单击聚光灯并键入终端,然后点击enter
在Mac上,您可能已经拥有SVN(只需测试开放终端和键入“svn”或“which svn”~(不带引号)在Github上:通过单击repo中的特定文件夹名称,找到git文件夹(而不是repo)的Github路径从浏览器的地址栏复制路径打开终端并键入:svn export下一步粘贴地址(例如):https://github.com/mingsai/Sample-Code/tree/master/HeadsUpUI替换单词:tree/master带有单词:trunk键入文件的目标文件夹(在本例中,I将目标文件夹存储在当前用户)这里空格只是空格键而不是单词(空格)~/Downloads/HeadsUpUI最后一个终端命令显示下载文件夹(将地址与步骤5进行比较)svn导出https://github.com/mingsai/Sample-Code/trunk/HeadsUpUI~/下载/HeadsUpUI
BTW-如果您在Windows或其他平台上,您可以在以下位置找到subversion(svn)的二进制下载http://subversion.apache.org
~如果您想签出文件夹而不是简单地下载它,请尝试使用svn帮助(tldr:replace export with checkout)
使现代化
关于恢复中断的下载/签出的评论。我会尝试先运行svn清理,然后再运行svn更新。请在SO中搜索其他选项。
将git存储库文件夹下载到当前目录并删除git文件。
#!/bin/sh
function download_git_folder() {
repo_url=$1
branch=$2
repo_subfolder_path=$3
repo_folder=$(basename $repo_url)
git init
git remote add -f origin ${repo_url}
git config core.sparseCheckout true
echo "${repo_subfolder_path}" >> .git/info/sparse-checkout
git pull origin ${branch}
mv "${repo_subfolder_path}"/* ./
readarray -td/ root_subfolder <<<"${repo_subfolder_path}"; declare -p root_subfolder;
rm -rf ./.git ${root_subfolder[0]}
}
用法
download_git_folder "git@github.com:foobar/Test.git" "master" "Test/bar"
另一个具体示例:
就像我想从url下载“iOS Pro Geo”文件夹
https://github.com/alokc83/APRESS-Books-Source-Code-/tree/master/%20Pro%20iOS%20Geo
我可以通过
svn checkout https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
注意路径中的主干
编辑:(根据Tommie C的评论)
是的,使用导出而不是签出将提供一个干净的副本,而无需额外的git存储库文件。
svn export https://github.com/alokc83/APRESS-Books-Source-Code-/trunk/%20Pro%20iOS%20Geo
已编辑:如果树/主节点不在url中,则分叉它,它将在分叉的url中。
无论谁在处理特定的文件夹,他都需要克隆该特定的文件夹本身,为此,请使用稀疏签出执行以下步骤。
创建目录。初始化Git存储库。(git初始化)启用稀疏检出。(git-config-core.sparsecheckout true)告诉Git你想要哪些目录(echo 2015/brand/May(参考你想要处理的文件夹)>>.Git/info/spease checkout)添加remote(gitremoteadd-f源https://jafartke.com/mkt-imdev/DVM.git)获取文件(git pull-origin master)