【问题标题】:Cloning subtree/subdirectory of git repo克隆 git repo 的子树/子目录
【发布时间】:2018-07-07 04:15:52
【问题描述】:

我在 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

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

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

【问题讨论】:

标签: git git-clone git-subtree


【解决方案1】:

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

这样安装:

pip install git+git://github.com/HR/github-clone#egg=ghclone

然后像这样使用它:

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

【讨论】:

  • 这是一个非常直接的答案。
【解决方案2】:

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

但是,考虑到即使是部分克隆(如果存在)仍会保留资产/工具路径结构,这更可取。
你可以做一个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')?”,但适用于存档的子文件夹,而不是文件。

【讨论】:

  • 我唯一要添加的可能是做一个浅克隆: git clone --depth 1 --branch [branch_name] --single-branch
  • @johnb003 我同意:这确实会限制克隆的数据量。
猜你喜欢
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2012-08-03
  • 2013-07-14
  • 2013-08-07
  • 2018-08-21
相关资源
最近更新 更多