如何撤销git sparse-checkout add

9ceoxa92  于 5个月前  发布在  Git
关注(0)|答案(1)|浏览(79)

假设我对一个部分克隆进行了稀疏 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以在本地删除目录(而不是从服务器的分支删除)?

xwmevbvl

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 addgit rmgit commit这些删除:它们必须保持在工作树级别。
1.删除与目录对应的.git/info/sparse-checkout行(在您的示例中为Boost/boost_1_77_0/):

/Boost/boost_1_77_0/

字符串
1.如果父目录为空(在您的示例中就是这种情况:Boost/现在为空),并且您不需要它包含的文件(请参见下面的注解),则您还有两行需要删除:

/Boost/
!/Boost/*/


1.迭代,直到到达非空的父目录或克隆的根目录(在本例中,由于Boost/位于根目录,因此不需要重新命名)
1.运行命令git sparse-checkout reapply。它应该运行没有错误。
1.运行命令git status。它不应该显示任何删除的文件。
步骤6的注意事项:在cone模式下,你得到的文件(不是目录)包含在所有添加的目录或它们的父目录中,所以如果你依赖于其中的一些文件,请小心不要执行这一步-或者执行git sparse-checkout add那些你以后需要的文件。

相关问题