代码之家  ›  专栏  ›  技术社区  ›  iconoclast

在Git中切换diff算法会导致任何问题吗?

  •  1
  • iconoclast  · 技术社区  · 4 年前

    我想切换到Git中的耐心或直方图算法,但我想知道给定的仓库在算法使用上不一致是否有任何副作用。如果我切换,当我处理在算法切换之前添加的提交时,这会导致任何东西中断吗?如果其他开发人员不使用相同的算法,这会是一个问题吗?

    我想不出会发生冲突的具体情况,但这似乎是一个非常根本的变化,所以我还是要三思而后行。

    0 回复  |  直到 4 年前
        1
  •  4
  •   bk2204    4 年前

    您使用的diff算法从您设置设置时开始生效,因此它将影响当时正在使用的任何操作。更改diff算法不会产生任何明显的负面影响:任何diff算法都会产生等效的diff,但问题是人们阅读起来有多容易。耐心和直方图 通常 更好,但并非总是如此。

    您可能遇到的唯一问题是,如果您将差异存储在某些系统或存储库中(例如由生成的文件 git format-patch ),这并不常见,但在一些Linux发行版打包工作流程中使用。在这种情况下,如果不同的人使用不同的差异算法,即使差异在逻辑上是等效的,当用户之间重新生成补丁时,你也会看到很多差异噪声。

    如果你有这样的情况,最好用你的工具强制一些固定的差异算法,这就是我过去所做的。这看起来像是让你的工具运行 git -c diff.algorithm=myers format-patch .

    除此之外,如果你发现你更喜欢默认值以外的东西,那么改变diff算法真的没有坏处。

        2
  •  2
  •   knittl    4 年前

    ,

    它不会破坏任何东西。差额总是事后计算的。您可以通过配置永久更改diff算法,也可以通过命令行上的选项标志临时更改。

    Git不存储差异,所有历史记录都存储为树对象的(完整)快照。树总是指向完整的文件(Git术语中的“blob”)或子目录(由其他树对象表示)。

        3
  •  1
  •   VonC    4 年前

    看着 evolution of both histogram and patience diffs ,对过去的提交没有副作用。

    仅对以下对象有影响 git diff 命令本身(或基于diff的操作,如 log -p ).
    例如,a git diff --histogram 在Git 2.1之前完成的操作会触发过多的内存分配。