【问题标题】:How does Bazaar handle file renaming?Bazaar 如何处理文件重命名?
【发布时间】:2022-11-30 19:44:50
【问题描述】:

我很想知道更多关于不同版本控制系统如何跟踪存储库中重命名文件的信息,尤其是在合并的情况下。 On this question,比较 Git、SVN 和 Mercurial 的文件重命名策略,有人发帖 this blog post from an author 声称 Bazaar 的文件重命名策略比任何其他 VCS 都要健壮得多。作者指出 Bazaar“将重命名视为一流的操作”。

作者没有解释的是这是如何工作的,将重命名视为一流操作意味着什么,以及为什么它的策略比例如Git 的“最佳猜测”重命名检测算法。

我没有 Bazaar 的经验,但我想知道:

  1. 它如何处理文件重命名?
  2. 是什么让它的算法比其他流行的 VCS(如果有的话)更可靠?

    我无法从 Bazaar 自己的文档中轻松找到这些信息。

【问题讨论】:

    标签: version-control file-rename bazaar


    【解决方案1】:

    前言

    Bzr 死了

    没有 2007 年事实的文字只是一坨屎

    在 bzr 或 hg 中,你有两个东西:文件对象(在重命名时不改变)和文件名(在重命名时改变)。两个应用程序都保留此信息,但不同之处在于实现。 hg 中文件对象的主要存储取决于文件名(如果前一个文件对象没有相同的文件名,则指向前一个文件对象的指针,即一对(文件名,修订))。在 bzr 中,文件对象直接存储在磁盘上。

    来源:https://www.markshuttleworth.com/archives/123#comment-110483

    答案

    1. Bzr record(ed) 在 repo 中重命名为单个事务“rename”,在 hg 中它(仍然)是“remove”+“add”,也记录在 revlog 中并给出相同的结果:每个对象的整个历史的可追溯性)
    2. 在 2022 年 Bzr 的重命名并不比 Hg“更可靠”,但 Git 的猜测更好(只是因为在边缘情况下每个猜测而不是记录的事件都可能是错误的)

      恢复

      在 2022 年,由于重命名的可能性,您没有理由更喜欢 Bzr(或其继任者 Breezy)或 Darcs 或 Pijul 而不是 Hg pure

    【讨论】: