克隆 subtree/subdirectory 的 git 存储库

Cloning subtree/subdirectory of git repo

我在 Github 上有一个 git 仓库,看起来是这样的:

.git/
assets/
  tools/
    a.sh
    b.sh
    c.sh

当然 .git 文件夹不在版本控制中,但您明白了。我想将 tools/*.sh 复制到本地目录,路径为:

./scripts/git/tools

我当前目录是一个 git 存储库,与远程 git 存储库共享完全不同的历史记录,我只想从远程复制一些文件,我不想合并任何东西。

我想我可以做这样的事情:

git clone --path assets/tools/*.sh "$remote_repo"  ./scripts/git/tools

但是那个命令不是真的,有什么命令可以用来做这个吗?

我能想到的唯一其他方法是将整个存储库克隆到某个临时目录,然后将文件复制过来,但这并不那么有趣。

the only other way I can think of doing it, is cloning the whole repo to some temp directory and then copying the files over, but that's not as much fun.

然而,考虑到即使是部分克隆(如果存在)仍会保留 asset/tools 路径结构,这是更可取的。
你可以做一个,然后复制你的文件。

使用 Git 2.17/2.18,您可以尝试 partial or narrow clone,仅克隆一个子文件夹,但前提是远程服务器不支持此新功能。

另一个更经典的选择是使用(如果远程存储库支持)最新HEAD的存档(zip文件):见“How to checkout only one file from git repository ('sparse checkout')?”,但应用到存档的子文件夹,而不是一个文件。

对于 Github 存储库,您可以克隆任何 sub-directories 的任何存储库,使用 工具 github-clone

这样安装:

pip install github-clone

然后像这样使用它:

ghclone https://github.com/HR/Crypter/tree/dev/app