Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
本地删除git repo早期版本中的大型旧文件_Git - Fatal编程技术网

本地删除git repo早期版本中的大型旧文件

本地删除git repo早期版本中的大型旧文件,git,Git,我有一个Git-lfs-repo,里面有很多大文件(它们不断更新)。每次我使用git pull时,我都意识到当前版本保存在磁盘的某个地方。在使用git一年之后,我意识到很多不必要的信息都存储在磁盘中(旧版本的大文件)。我仍然希望他们在远程回购中,但我不希望他们继续占用我的空间。我如何在本地机器中保存最新的文件,而不改变远程回购中的任何内容?谢谢 编辑:确定。。。我看到一些关于这是不可能的评论。。。但真的是这样吗?直观地说,应该能够将“旧的大型lfs文件”转换为本地repo中的链接(这已经节省了大

我有一个Git-lfs-repo,里面有很多大文件(它们不断更新)。每次我使用git pull时,我都意识到当前版本保存在磁盘的某个地方。在使用git一年之后,我意识到很多不必要的信息都存储在磁盘中(旧版本的大文件)。我仍然希望他们在远程回购中,但我不希望他们继续占用我的空间。我如何在本地机器中保存最新的文件,而不改变远程回购中的任何内容?谢谢

编辑:确定。。。我看到一些关于这是不可能的评论。。。但真的是这样吗?直观地说,应该能够将“旧的大型lfs文件”转换为本地repo中的链接(这已经节省了大量空间),无论何时,我更新大型文件,它都应该覆盖最近的文件(实际上,除了文件的最新版本之外,我从未更改过任何内容……但我不想在远程删除它们,以防万一……)


更多信息:例如,在我当前的repo中,.git/占用5GB空间(只是所有不必要的lfs文件),而我的相关工作文件夹/只有1GB…如果我git克隆repo,就像它从未在我的本地机器中存在一样,它应该是1GB,对吗?

更新-最初我不知怎么读到了“git lfs”在你问题的内容中,我一定是在心里把“大文件”翻译成了“LFS”,因为如果你的回购协议中有“大文件”,你就应该使用LFS。现在我看到你只是在更新中提到了LFS,所以也许你一直在使用它,也许你没有

答复作了相应调整:


这不仅是可能的,而且是git lfs的基本功能

如果你没有使用lfs,那么过渡到lfs可能会有点问题,因为它需要重写你的回购历史。你的更新可以被解读为建议你可以在回购内容中用链接代替文件;你不能。
git
不会这样做,如果你使用非
git
工具来伪造它然后你会留下一个损坏的repo。
git
中的存储是“内容可寻址的”,这意味着一些事情……但值得注意的是,这意味着内容是存储结构的一个组成部分

有一些工具支持这种类型的重写——一个专用的lfs迁移工具,以及BFG回购清理器中的lfs模式。最后我检查了一下,每一个都有它的怪癖。更重要的是,重写将像一个巨大的上游重基,把克隆原始回购的每个人的分支都搞乱了

所以…这是一个很好的实践,值得思考,但也许你不能为回购做些什么(除非你已经在使用LFS)。仍然有一些选择,这与评论让你相信的相反。这里有一点关于LFS,然后有一点关于不使用LFS

使用LFS

有几个特定于lfs的配置值可帮助确定本地存储中应保留的内容。基本上,这些值将帮助您定义“最近的分支”和“最近的提交”是什么,然后lfs将本地缓存最近分支上最近提交所需的对象

有关详细信息,请参阅
git-lfs-prune
的文档,以及
git-lfs-fetch
--prune
选项

无LFS时

你可以使用“浅层克隆”。只有更新版本的git才能提供良好的支持,因此你可能需要升级。你还必须定期“浅层”你的历史记录。任何给定的版本要么是“入”要么是“出”——没有“过了这个年龄,放下大文件”.这是LFS特别需要使用的技术


查看
git clone
--depth
--shallow-*
选项,了解有关您可以做什么和如何做的详细信息。

可能的副本我仍然希望它们在远程repo中,但我不希望它们继续占用我的空间,您不能这样做。git repo始终是完整的副本,它要么在您的repo(和本地)中或者不是,没有折衷办法。听起来这些文件根本不应该存在于您的回购协议中。一些回购协议可能会有所帮助,但这取决于您的供应商/主机非常感谢可能的副本。因为我们已经使用LFS,所以我想我的答案是尝试使用git LFS prune?