删除的文件是否仍然使用hg克隆下载?

时间:2011-02-10 13:44:11

标签: mercurial delete-file mercurial-bigfiles

在我们的Mercurial仓库中,我们添加了一个非常大的文件(并执行了hg推送),然后删除了大文件(并进行了另一次推送)。

现在,如果有人hg clone,他们仍然会删除那个大文件吗?我知道它不会出现在工作目录中,因为它已被删除,但该文件是否仍会被下拉并存储在Mercurial内部存储中?

我想确保人们不必下拉文件。我已经知道真正的大文件应该存储在Mercurial之外,所以我删除了该文件。但是我想知道人们是否还会删除大文件 - 在这种情况下我想我会从头开始重新创建存储库。

2 个答案:

答案 0 :(得分:6)

当然它仍然会在存储库中。

您可以随时更新回旧版本,如果您更新回到提交文件时所获得的修订版本,那么它将一直存在于其中。

有两种方法可以缓解这种情况(当你提交时,而不是现在):

  • 其中一个大文件扩展名,它们实际上是将大文件添加到辅助存储库并链接这两个文件夹,因此如果您更新到文件不存在的修订版本,并且您还没有它,它不会得到更新。即。它更像是一种“按需”式的拉动方式
  • 如果文件永远不会更改,请将其保留在网络上,只创建某种链接而不是完整副本

现在,你有四个选择:

  • 删除添加了文件的变更集以及之后的所有变更集。您可以使用Mercurial Queues扩展来实现。请注意,您需要在所有克隆中执行此剥离操作。如果只有一个用户将其历史记录中包含该文件的存储库推回到中央克隆,那么就会有更改集。
  • 从头开始重建存储库
  • 使用hg convert命令和一些过滤,--filemap选项可用于此
  • 保持原样。它有多大,会成为一个大问题吗?

请注意,手动或通过hg convert重建存储库将使所有克隆无效。任何尝试从旧克隆推送到新的中央克隆的人都会收到有关unrelated repositories的消息。如果你的任何用户都是stupi ^ H ^ H ^ H ^ H ^ Hnot足够聪明,意识到强制推送是一个坏主意,那么你将遇到这种方法的问题。

答案 1 :(得分:4)

是的,该文件仍在历史记录中。如果要完全删除它,则需要使用Mercurial Queues - 请参阅Mercurial wiki上的Editing History

请记住,随着修订ID的更改,这会破坏克隆。

相关问题