是否有允许您永久删除文件的版本控制系统?

时间:2009-01-27 09:19:18

标签: version-control large-files

我需要在版本下保留一些大文件(一些Gigs)。

我不需要,而且我不能保留版本的所有版本的文件。 我希望能够在某个时刻从我的VCS大文件版本中删除。

我想要在版本控制下保留的文件是大的.zip文件或ISO映像。 这些文件可能包含可执行的软件或数据(地震数据,SAR图像,GNSS数据),它们由我公司的软件供应商提供。

我可以使用哪种控制版本系统?

11 个答案:

答案 0 :(得分:8)

在CVS中,您可以通过从repo中删除文件来实现。 Subversion允许通过转储repo的内容并过滤它来删除文件(这有点麻烦)。 Perforce有一个obliterate命令。许多较新的分布式VCS使得它们在整个地方使用哈希变得相当困难,而且你的回购可能在其他地方被复制的事实也使事情变得复杂。 Hg有一个strip命令(Mq扩展名的一部分),Git也可以这样做。

答案 1 :(得分:4)

我认为没有任何版本控制系统允许您定期执行此操作,因为这违反了版本控制系统所代表的一切。

答案 2 :(得分:4)

Perforce通常允许以两种方式放置文件,仅作为头部修订(因此,您只需要一个副本)或所有修订。 Perforce确实具有可用于删除修订的admin level obliterate命令。由您来查询文件列表(可能是按日期或修订数量),并指定对obliterate命令的修订。顾名思义,删除会从数据库中永久删除修订版本,因此,我总是生成脚本来执行此操作并在运行它们之前对其进行检查。如果没有使用-Y标志运行obliterate命令,它将生成一个将被删除的列表,也非常有用。

答案 3 :(得分:4)

不知何故,我得到的印象是你根本不应该使用版本控制系统。如前所述,您尝试做的事情首先反对您需要版本控制系统的所有内容。

我建议您创建一个文件系统目录结构,它对您要完成的任务有意义,以便您可以构建数据。只需备份这些文件。

答案 4 :(得分:3)

TFS有一个destroy命令,您可以根据需要使用该命令永久删除文件或修订。

MSDN article有更多信息。

答案 5 :(得分:1)

许多版本控制系统允许您以某种方式配置它们,以便它们仅存储文件的多个版本之间的差异,并通过它来节省空间。

例如,如果您已提交1Gig文件,则更改其中的一部分并再次提交,只有更改的部分将存储在版本控制系统中。
将不会使用2Gigs(初始和新文件),但只有1Gig + sizeOfChanges。

只有一个缺点:如果您存储的文件会将其整个内容从修订版更改为修订版,这也可能会适得其反,因为更改所占用的空间几乎与原始版本相同。存档文件是此类文件的示例,其中(实际)内容中的少量更改可能导致存档文件的内容完全更改。

我建议您根据自己的具体需求和环境测试多个版本控制系统,并在服务器端监控每个版本控制系统如何更改每个系统的存储要求。

答案 6 :(得分:1)

某些分布式版本控制系统允许创建“检查点”,允许您将此版本用作基本修订版本,并确保您在每次结帐时都可以在检查点之前提取所有历史记录。因此,您可以删除大文件,创建检查点,并将存储库从该检查点签出/克隆到新目录。然后你有一个新的小型存储库,但没有检查点之前的历史记录。您不需要该历史记录,您可以刻录CD上的旧存储库,并从现在开始使用新的,部分存储库。

我只在darcs进行了测试,并且它有效,但YMMV取决于版本控制系统和用例。

答案 7 :(得分:1)

听起来我需要一个智能备份系统,而不是版本控制。

我使用 SyncBackSE ;它允许您保留许多以前的版本,并且还可以执行诸如“忽略超过30天前更改的所有文件”之类的事情。

这是我使用的付费软件中的一小部分。我认为值得一试。

答案 8 :(得分:1)

我认为你在谈论像“AlienBrain”“斗”系统这样的东西,不是吗?能够从版本控制中删除一些修订。 如果你想破坏一个项目,它通常被称为“删除”,并且它受到许多系统的支持。 铲斗,AFAIK由以下人员支持:

答案 9 :(得分:0)

我会将这些文件保存在一个唯一的名称(可能是日期戳),也可能另外在版本控制系统中对外部文件进行文本引用。

答案 10 :(得分:0)

Fossil允许您通过“shun”机制执行此操作。然而,化石是分布式SCM意味着这不会影响所有存储库(原因很明显)。