mercurial - 已删除的文件是否仍可通过 hg 克隆下载?

标签 mercurial delete-file mercurial-bigfiles

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

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

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

最佳答案

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

您始终可以更新回较旧的版本,如果您更新回提交文件时获得的版本,它将尽显其荣耀。

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

  • 大文件扩展之一,这些扩展本质上是将大文件添加到辅助存储库并将两者链接起来,这样,如果您更新到该文件不存在的修订版本,并且您还没有该文件,它不会得到更新。 IE。这更像是一种“按需”的拉动方式
  • 如果文件永远不会更改,请使其在网络上可用,并创建某种指向该文件的链接而不是完整副本

现在,您有四个选择:

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

请注意,手动或通过 hg Convert 重建存储库将使所有克隆失效。任何尝试从旧克隆推送到新中央克隆的人都会收到一条有关不相关存储库的消息。如果您的任何用户不够聪明,没有意识到强制推送是一个坏主意,那么您在使用这种方法时就会遇到问题。

关于mercurial - 已删除的文件是否仍可通过 hg 克隆下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4957817/

相关文章:

git - 忽略(不提交)Git 跟踪的本地删除文件

powershell - 递归删除 desktop.ini 文件

linux - 如何在linux系统上查找大文件并删除

version-control - 对于二进制文件,我应该使用 bfiles 还是 bigfiles?

date - 获取 hg 提交的 Unix 时间戳(以秒为单位)

svn - 如何从 Mercurial 创建与 SVN 兼容的补丁程序?

java - mvn 仅安装 hg 存储库中已修改的文件

运行 mercurial 命令时 Windows 批处理文件退出

powershell - 我的递归删除有什么问题?