【问题标题】:In a git diff, distinguish a delete from a move在 git diff 中,区分删除和移动
【发布时间】:2020-12-05 01:01:54
【问题描述】:

(我找到了a related issue。它没有提到 Git。还有一个名为 Copy Paste Detector 的工具,但它是特定于代码的,而不是纯文本(也不是 git-aware)。)

我将知识库保存为一组纯 markdown(纯文本)文件,并在 git 中跟踪对其的更改。

假设 git diff 显示缺失的大块文本。可能是我删除了它,也可能是我移动了它(在同一个文件中,或移动到另一个文件中)。

我希望我有一些简单的方法可以知道是哪一个。目前我 grep 删除子字符串的整个知识库。如果我没有找到,我会再找几个。我可能应该模糊 grep —— 但即使那样它仍然可能不起作用,因为也许我移动了大部分文本,但没有移动我模糊 grep 的特定子字符串。

最好是一个 git-aware 工具,它可以查找删除和插入之间的模糊匹配。理想情况下可以忽略空格。

这样的事情存在吗?或者如果没有,是否可以在没有大量工作的情况下拼凑起来?

【问题讨论】:

  • Git 的git blame 实际上在某种程度上试图解决这个问题。主要问题是您必须查看代码移动到 的文件,然后它会找到代码来自 的文件。它(目前)不具备反过来工作的能力。

标签: git string-matching git-diff


【解决方案1】:

对于单独的代码块,我不知道有什么方法可以按照您的要求进行操作。 (对于作为一个整体的文件,如果 git 在一个路径上看到删除而在另一路径上看到新文件,并且默认情况下该值足够高,则 git 确实 计算“相似性”值可配置的阈值 - 然后它将文件报告为“重命名”。但这对您的用例没有帮助。)

如果你事后经常需要知道这类事情,那么我会考虑在提交消息或提交说明中记录所做的事情。 (“将 XXXX 从 /file1 移动到 /file2”或“从 /file3 删除 YYYY”)

【讨论】:

    猜你喜欢
    • 2022-11-24
    • 2015-11-28
    • 2011-08-17
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 1970-01-01
    • 2023-03-31
    相关资源
    最近更新 更多