在以前版本的git repo

时间:2018-01-29 16:08:59

标签: git

我有一个包含大量大文件的Git lfs repo(并且它们不断更新)。每次我git pull,我都意识到当前版本保存在磁盘的某个地方。 git拉了一年之后,我意识到磁盘中存储了很多不必要的信息(旧版本的大文件)。我仍然希望他们在远程回购中,但我不希望他们继续占用我的空间。如何在不更改远程仓库中的任何内容的情况下将大部分最新文件保留在本地计算机中?感谢。

编辑:好的......我看到一些关于此事的评论是不可能的......但这是真的吗?直观地说,一个应该能够将“旧的大型lfs文件”转换为我本地仓库中的链接(这已经节省了大量空间),每当我更新大文件时,它应该只是覆盖最近的文件(我实际上永远不会改变除最新版本的文件以外的任何东西...但我不想在远程中删除它们以防万一......)?

更多信息:例如,在我当前的repo中,.git /占用5GB空间(只是所有不必要的lfs文件),而我的related_working_folder /只有1GB ....如果我git克隆我在本地机器上从未存在过的repo,应该是1GB吧?

1 个答案:

答案 0 :(得分:2)

更新 - 最初我以某种方式阅读" git LFS"在你的问题的内容;我必须在心理上翻译大文件"到" LFS",因为如果你拥有"大文件"在您的仓库中,您使用LFS。现在我看到你有点在你的更新中提到LFS,所以也许你一直在使用它,也许你没有。

相应调整答案:

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

如果您还没有使用过lfs,那么转换到它可能会有点问题,因为它需要重写您的回购历史记录。您可以阅读您的更新,建议您只需用一个链接替换回购内容中的文件;你不能。 git不会做到这一点,如果你使用非git工具来伪造它,那么你将会留下一个腐败的回购。 git中的存储是"内容可寻址",这意味着一些事情......但这里值得注意的是,它意味着内容是存储结构的组成部分

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

所以......这是一个很好的做法并且正在思考,但也许你不能为这个回购做些什么(除非你已经在使用LFS)。还有一些选择,与您认为的评论相反。所以这里有点关于LFS,然后有点关于没有LFS ...

使用LFS

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

有关详细信息,请参阅git lfs prune的文档以及--prune的{​​{1}}选项。

没有LFS

您可以使用"浅层克隆"。只有较新版本的git才能提供良好的支持,因此您可能需要升级。而且你必须定期"重新浅薄"你的历史。任何给定的版本都是" in"或" out" - 没有超过这个年龄,删掉大文件"。这是特别需要LFS使用的技术的那种东西。

请参阅git lfs fetch的{​​{1}}和--depth选项,详细了解您可以做什么以及如何做。