我如何才能查看部分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 中引入的“稀疏签出”功能来实现这一点。
启用此功能
- 设置core.sparseCheckout配置选项为“true” *,并且
$GIT_DIR/info/sparse-checkout
使用要保留的路径名模式填充每个存储库文件**。人们可能会使用索引***中的低级“skip-worktree 位”来管理单个文件的稀疏性,但使用更高级别的机制可能更容易。
整体用户界面存在一些缺陷(即没有简单的方法说“在此 URL 克隆存储库但仅检出 X、Y 和 Z”),但它足以获得“部分检出”功能。
*参见“core.sparseCheckout”git 配置手册页
**请参阅“稀疏结帐”git 读取树手册页
***请参阅“Skip-worktree 位”git 更新索引手册页
答案3
不,在 Git 中这是不可能的。
在 Git 中实现这样的功能需要付出巨大的努力,这意味着客户端存储库的完整性将无法再得到保证。如果您有兴趣,请在 git 邮件列表中搜索有关“稀疏克隆”和“稀疏获取”的讨论。