如何从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存储库文件夹下载到当前目录并删除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"
其他回答
如果您有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 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
有时,一个具体的例子有助于澄清所提出的替代方案。
我找到的最简单的方法是如何仅克隆Git存储库的子目录?
我在gitclone命令中添加了-b<branch>--singlebranch以下载特定的分支。所以我使用的命令是:
git clone --depth 1 --single-branch -b <branch> --filter=blob:none --sparse <url>
git sparse-checkout set <directory>
通过在url中将github替换为githubbox,打开repo到codesandbox,然后在codesandbox上转到文件菜单并将其导出为zip。
对于以下回购:https://github.com/geist-org/react/tree/master/examples/custom-themes
输入以下url:https://githubbox.com/geist-org/react/tree/master/examples/custom-themes
在codesandbox中,转到文件菜单并将其导出为Zip。