克隆git repo的子树/子目录

时间:2018-07-07 04:15:53

标签: git git-clone git-subtree

我在Github上有一个git repo,看起来像这样:

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

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

./scripts/git/tools

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

我认为我可以做这样的事情:

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

但是该命令不是真实的,我可以使用一些命令来做到这一点吗?

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

2 个答案:

答案 0 :(得分:2)

  

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

但是,考虑到即使存在部分克隆,仍然会保留资产/工具的路径结构,因此这是可取的。
您可以执行sparse checkout elsewhere,然后复制文件。

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

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

答案 1 :(得分:-1)

对于GitHub存储库,您可以使用https://github.com/HR/github-clone

克隆任何GitHub存储库的任何子目录(在任何参考处)。