2

我已经将几棵树克隆到我的本地磁盘中,它从我有限的笔记本电脑磁盘中占用了太多空间。与 SVN 和 CVS 等非分布式版本控制不同,当您签出 git 或 Mercurial 存储库时,您会得到整个树,包括整个历史记录,并且由于我很少将任何代码提交到这些存储库中,但希望保持它们的状态——到目前为止,我发现这些分布式版本控制系统浪费了太多的本地磁盘。

到目前为止,我对消除这种浪费的想法很少:

  • 在本地磁盘上创建一个 zfs 或 btrfs 分区(可能是一个循环文件​​系统,因为我不想让它太持久),这应该可以更好地利用重复的文件块。这可能会占用过多的 CPU 周期,从而使其效率低下。

  • 放弃使用版本控制并创建一个脚本来每天下载包含整个存储库的 .zip 文件。这将占用太多带宽,我不想这样做。

我的最终解决方案是以某种方式使用 git/hg,就像我们使用 SVN 和 CVS 一样——在服务器上保留历史记录并在本地仅保留最新的修订版,或者在本地保留有限的历史记录,两者都不会破坏其他所有内容,因此我可以看到日志或将文件恢复到以前的版本,如果本地不可用,版本控制系统将从远程获取所需的信息。

4

5 回答 5

3

从 hg clone 帮助信息:

To pull only a subset of changesets, specify one or more revisions
identifiers with -r/--rev or branches with -b/--branch. The resulting
clone will contain only the specified changesets and their ancestors.

您应该能够使用 HG 的修订语法来限制您获得的修订数量,假设您想要的不仅仅是最新的。使用 -r tip 来获取提示。

于 2013-02-12T17:17:52.283 回答
2

使用 svn,您实际上有 2 个完整的、未压缩的已检出修订副本(在 中存在每个文件的完整副本.svn)。使用 mercurial,您有 1 个完整的、未压缩的已签出修订副本和一个高度压缩的二进制增量表示(向下.hg/store)。在很多情况下(可区分的文本文件),包含所有内容的 hg 克隆实际上会比单个修订的 svn checkout 更小。

我认为您的块级重复数据删除根本没有帮助。Mercurial 和 Git 都使用非常高效的二进制增量,然后将其压缩,在它们的存储中几乎没有多余的信息,并且不会有块对齐的内容。

于 2013-02-11T14:43:07.240 回答
2

使用 git,您可以使用--depth选项仅创建浅拷贝。

另一方面,这样不会节省太多空间:http: //blogs.gnome.org/simos/2009/04/18/git-clones-vs-shallow-git-clones/

于 2013-02-11T13:01:52.220 回答
1

使用 mercurial,您可以要求一个空的工作副本(仅克隆 .hg 文件夹):

hg clone -U <source>

有关更多选项,请参见hg help clone

我希望这有帮助。

于 2013-02-11T14:47:23.517 回答
0

使用“汞份额”。这将允许您只保留一个共享历史记录和多个检出作为工作副本的修订。

于 2015-07-04T22:12:28.177 回答