假设我对一个部分克隆进行了稀疏 checkout ,以避免从一个大型Git repo中获取所有内容:
git clone --filter=blob:none --sparse https://example.com/url/of/my/repo.git
cd repo
git sparse-checkout add Boost/boost_1_77_0
字符串
然后如何撤消git sparse-checkout add Boost/boost_1_77_0
以在本地删除目录(而不是从服务器的分支删除)?
1条答案
按热度按时间xwmevbvl1#
到目前为止,还没有根据documentation撤消
git sparse-checkout add
的命令。这里有一个手动解决方案,需要修改
.git
目录中的配置文件:小心操作。此解决方案假设您处于圆锥模式,这可能是因为它是默认模式。
这个解决方案假设你做了一个匹配的
git sparse-checkout add
,也就是说,如果你做了一个更大的add
,并且想取消添加一个比git sparse-checkout add
更小的文件集,你就必须调整它。请注意,这个解决方案不会尽可能地减少克隆的大小,因为目前是local blobs cannot be deleted from a clone,但是如果你不使用Git LFS,那么你没有恢复的空间通常小于删除文件的大小(如果blob大小是文件大小的30%,那么你将从130%的空间使用到30%的空间使用)。
手动解决方案
1.备份
.git/info/sparse-checkout
以防万一1.从清洁状态工作:运行
git status
命令。它不应该显示任何添加,更改,删除或未跟踪的内容。这不是严格必要的,但建议帮助您理解接下来的步骤。1.运行
git pull
以保持最新。1.从你的克隆中删除目录(在你的例子中是
Boost/boost_1_77_0
)。如果你运行git status
,你应该看到它的内容被删除。不要git add
或git rm
或git commit
这些删除:它们必须保持在工作树级别。1.删除与目录对应的
.git/info/sparse-checkout
行(在您的示例中为Boost/boost_1_77_0/
):字符串
1.如果父目录为空(在您的示例中就是这种情况:
Boost/
现在为空),并且您不需要它包含的文件(请参见下面的注解),则您还有两行需要删除:型
1.迭代,直到到达非空的父目录或克隆的根目录(在本例中,由于
Boost/
位于根目录,因此不需要重新命名)1.运行命令
git sparse-checkout reapply
。它应该运行没有错误。1.运行命令
git status
。它不应该显示任何删除的文件。步骤6的注意事项:在cone模式下,你得到的文件(不是目录)包含在所有添加的目录或它们的父目录中,所以如果你依赖于其中的一些文件,请小心不要执行这一步-或者执行
git sparse-checkout add
那些你以后需要的文件。