git - 使用 git stats 显示添加、修改和删除的行数
解决方案
这个问题在 2018 年初出现了这个补丁提案。
菲利普伍德试图突出“修饰线”的概念。
(他的补丁的简化版本在这里)
当一组行被修改时,大块包含删除,然后是插入。
为了正确暂存修改行的子集,我们需要将选定的删除与选定的插入相匹配,否则我们最终会得到删除和上下文行,然后是插入,这不是我们想要的。
这最终变得棘手:
为了实现暂存修改的行,代码需要将每个删除的行与其替换行配对。
它通过将连续选定的行组合在一起来做到这一点,因此它有一个删除行组的列表和另一个插入行的列表,然后它通过列表中的索引对删除和插入进行配对。
菲利普开始怀疑:
我开始明白为什么我在编写此代码时尝试的所有其他程序(
tig
、gitg
和gitk
的mercurial
版本add -i
)都没有尝试正确地暂存修改的行,尽管我认为 Git 应该有一些方法来做到这一点。
Qnd Git Junio C. Hamano 的主要维护者证实了这些疑问,并给出了以下答案:
是的,这是一种可以提出和实现的功能,它适用于某些有限的情况,但不适用于其他情况。
并且很难解释如何解决实现限制——这就是为什么我停在“拆分这个大块?” 并且在我设计原始的“增量添加”功能时并没有超越它。我认为难的真正原因是“舞台修饰线”中没有很好的“修饰”定义。
更糟糕的是,没有好办法机械地弄清楚,因为补丁只给你“这些被删除”和“这些被添加”,而没有给你“删除块中的这一行对应于添加的这两行块”(即“结果中将原来的一行修改成这个东西”)。
推荐阅读
- android - 具有动态适配器大小的嵌套回收器视图
- rabbitmq - Rabbitmq 无缝升级,无需停机
- c# - FlowDocumentScrollViewer 在滚动时崩溃
- ionic-framework - Ionic 3 + Protractor 触发滑动手势(e2e 测试应在 Chrome 浏览器或通过 Appium 的设备上运行??)
- sql - 如何获得所有“许多”结果都符合条件的结果?
- rxjs - 创建递归可观察循环?
- angular - Angular Material 表单域标签字体颜色和大小
- android - IDE 出错,但项目运行成功
- sql - XML 路径 SQL 服务器
- typescript - Angular 6 中的 Zone.js