7

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

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

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

我可以使用什么控制版本系统?

4

11 回答 11

8

在 CVS 中,您可以通过从 repo 中删除文件来做到这一点。Subversion 允许通过转储 repo 的内容并对其进行过滤以删除文件(这有点麻烦)。Perforce 对此有一个obliterate命令。许多较新的分布式 VCS 由于在各处使用散列而变得相当困难,而且您的存储库可能已在其他地方复制的事实也使事情变得复杂。Hg 有一个strip命令(Mq扩展的一部分),我认为 Git 也可以做到。

于 2009-01-27T09:24:21.323 回答
4

我认为没有任何版本控制系统可以让您定期执行此操作,因为这与版本控制系统所代表的一切背道而驰。

于 2009-01-27T09:23:08.627 回答
4

不知何故,我觉得你根本不应该使用版本控制系统。如前所述,您尝试做的事情与您首先需要版本控制系统的一切背道而驰。

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

于 2009-01-27T21:20:42.233 回答
4

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

于 2009-01-27T13:49:28.260 回答
3

TFS 有一个 destroy 命令,您可以使用它来永久删除您认为合适的文件或修订。

此MSDN 文章中有更多信息。

于 2009-01-27T13:30:04.883 回答
1

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

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

它是我使用的少数付费软件之一。我认为值得一试。

于 2009-01-28T23:40:08.147 回答
1

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

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

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

我建议您根据您的特定需求和环境自行测试多个版本控制系统,并在服务器端监控每个系统的存储需求如何变化。

于 2009-01-27T09:46:58.063 回答
1

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

我只在darcs中测试过它,它在那里工作,但 YMMV 取决于版本控制系统和用例。

于 2009-01-27T10:11:45.160 回答
1

我认为您在谈论诸如“ AlienBrain”“桶”系统之类的东西,不是吗?从版本控制中删除某些修订的能力。如果你想销毁一个项目,它通常被称为“obliterate”,并且它得到了许多系统的支持。桶,AFAIK 支持:

于 2010-03-30T13:02:18.270 回答
0

I would save such files under a unique name (datestamped, perhaps), and perhaps additionally make a textual reference to the external file in the version control system.

于 2010-05-21T03:48:59.033 回答
0

Fossil allows you to do this via the "shun" mechanism. Fossil being a distributed SCM, however, means that this does not affect all repositories (for obvious reasons).

于 2010-05-21T03:51:59.113 回答