检出 git 存储库的一部分

检出 git 存储库的一部分

我如何才能查看部分Git 存储库?我有一个包含多个模块的存储库,我只想在特定站点上安装其中一个模块。

在 Subversion 中,我会这样做svn export http://example.com/repository/path/to/module ./module-name

答案1

正如@Chris 提到的,Git 的当前版本确实支持稀疏检出。

要将本地存储库转换为仅包含指定目录:

cd <repo/location>
git config core.sparsecheckout true
echo desiredDir/ >> .git/info/sparse-checkout    # repeat to add multiple subdirs (the rest will be removed)

现在,删除除指定目录之外的所有目录:

 git read-tree -mu HEAD             # remove all, but those in .git/info/sparse-checkout

答案2

我认为最接近的等价于svn 导出将会git 存档。您可以path/to/module掌握存储库的分支并放入本地目录,module-name如下所示:

git archive --remote=url-of-Git-repository --prefix=module-name/ master:path/to/module |
tar xf -

如果远程服务器不支持存档,则从本地(裸)克隆中提取存档(如果这很重要,使用裸克隆可以避免在本地存储库中拥有文件的另一个副本)。


但是,您使用“check out”意味着(对我来说)您希望拥有一个只包含部分文件的 Git 工作树。您可以使用 Git 1.7.0 中引入的“稀疏签出”功能来实现这一点。

启用此功能

  1. 设置core.sparseCheckout配置选项为“true” *,并且
  2. $GIT_DIR/info/sparse-checkout使用要保留的路径名模式填充每个存储库文件**

    人们可能会使用索引***中的低级“skip-worktree 位”来管理单个文件的稀疏性,但使用更高级别的机制可能更容易。

整体用户界面存在一些缺陷(即没有简单的方法说“在此 URL 克隆存储库但仅检出 X、Y 和 Z”),但它足以获得“部分检出”功能。

*参见“core.sparseCheckout”git 配置手册页
**请参阅“稀疏结帐”git 读取树手册页
***请参阅“Skip-worktree 位”git 更新索引手册页

答案3

https://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-repositorys-sub-directory-only

不,在 Git 中这是不可能的。

在 Git 中实现这样的功能需要付出巨大的努力,这意味着客户端存储库的完整性将无法再得到保证。如果您有兴趣,请在 git 邮件列表中搜索有关“稀疏克隆”和“稀疏获取”的讨论。

相关内容