65.9K
CodeProject 正在变化。 阅读更多。
Home

高级 GIT 教程 - 如何使用 GIT 调试代码?

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (7投票s)

2020年5月19日

CPOL

3分钟阅读

viewsIcon

6514

Git blame 和 Git bisect 的入门介绍

引言

不幸的是,每个软件开发人员都知道事情经常出错。 有些东西会破坏构建,有些东西会破坏测试。 有人做了不符合编码规范的更改等等。

在这种情况下,弄清楚哪里出了问题可能非常困难,有时需要花费很长的时间和精力进行调试。

幸运的是,Git 也可以在这种情况下提供帮助。 让我们看看一些内置的 Git 命令,如果您的项目中出现问题,这些命令可以使您的生活更轻松。

找出是谁引入了错误的行

您正在阅读代码并找到一行。 “到底是谁干的?” - 这是你的第一个问题。 也许您不了解该行的目的,或者它不符合编码规范,或者它是错误的根本原因。 您可以做的第一件事是检查该文件的 git 日志,并找出哪个提交包含相关的更改。 这可能很耗时,特别是如果该文件有很长的历史记录,并且相关的更改发生在很久以前。

还有另一种更有效的解决方案:git blame。

只需键入 git blame filename。 它将显示每行的最后一次修改它的提交。

这样,很容易找出是谁进行了更改以及其目的是什么。

找到第一个破坏性的提交

您在代码中发现了一个错误。 您知道一周前它仍然不存在,并且您还不知道确切的根本原因。 如果您知道哪个提交引入了该错误,那将非常有帮助,您可以节省大量的调试时间。

Git bisect 在这种情况下是最佳解决方案。 Git bisect 是您提交历史记录中的一种二分查找方法。 它甚至可以处理合并提交。 让我们看看它是如何工作的

  1. 键入git bisect start - 它启动了 bisect 过程
  2. 键入git bisect bad - 它将当前提交标记为“bad”
  3. 键入git bisect good last_working_commit的哈希值 - 将您确定错误不存在的最后一个提交标记为“good”
  4. 现在git bisect 将检出一个介于当前提交和最后一个良好提交之间的提交。 编译并测试它。 如果存在错误,则键入 git bisect bad,否则键入 git bisect good。
  5. 重复步骤 4,直到找不到提交为止

感谢二分查找的强大功能,这是一种非常快速的查找有问题的提交的方法。

如果该错误不一致,它会随机出现在某些提交中,则此方法可能会导致问题。

自动化搜索过程

手动测试提交可能很耗时。

幸运的是,它可以自动化。 Git bisect 还支持运行自动化测试。

  1. 实现一个测试,如果不存在错误则返回 0,如果存在错误则返回非零(大多数测试框架已经以这种方式工作,因此在大多数情况下,实现一些简单的单元测试就足够了)
  2. 键入git bisect start
  3. 键入git bisect bad
  4. 键入git bisect good last_working_commit的哈希值
  5. 键入git bisect run your_test

此方法将找到您的错误所在的第一个提交。

摘要

当您必须弄清楚错误的根本原因时,git blame 和 git bisect 都非常有用。 考虑到您提交得足够频繁,它可能比使用经典的调试方法快得多。

历史

  • 2020 年 5 月 19 日:初始版本
© . All rights reserved.