目录
设想
场景详解
解决方案的详细描述
案例1——手动验证提交
案例2——提交的自动验证
分步指南
案例1——手动验证提交
案例2——提交的自动验证
测试你的知识
额外的Git材料
Git在调试代码时提供了很好的支持。本教程向您展示了它是如何工作的。
设想找到第一个损坏的git commit。
场景详解但是,git的主要目的是版本控制,它也可用于调试。
你在系统中发现了一个错误,你的前两个问题当然是:谁做的,什么时候做的?
让git帮你快速搞定。
解决方案的详细描述 案例1——手动验证提交如果您没有自动验证提交是否包含错误的方法,请遵循案例1。
解决方案将是git bisect。您可以使用命令git bisect start进入bisect模式。
然后您必须将当前提交标记为错误,因为它包含错误。输入git bisect bad命令。作为下一步,您必须标记最后一个已知的良好提交,即错误仍然不存在的提交。为此,您可能需要尝试多次提交。但是如果你记得它在2天前还在工作,那么就选择当天的提交。您可以检出每个提交进行测试。一旦你找到一个好的提交,使用命令git bisect good hash_of_the_good_commit。如果当前head是好的提交,则可以从命令末尾跳过哈希。
现在git bisect将检查一些提交。确定它们是否包含错误,并用git bisect good或git bisect bad标记它们。经过几个步骤,Git bisect会告诉你第一个好的提交。如果你认为你犯了一个错误,你可以随时重新启动bisect进程,只需输入git bisect reset即可。
案例2——提交的自动验证如果您有一个脚本或任何可执行文件可以确定错误是否存在,则可以加快此过程。您甚至可以使用测试框架。重点只是如果错误不存在,可执行文件应返回0,如果存在错误,则返回任何其他内容。
与情况1类似,使用命令git bisect start进入bisect模式。
然后您必须将当前提交标记为错误,因为它包含错误。输入git bisect bad命令。作为下一步,您必须标记最后一个已知的良好提交,即错误仍然不存在的提交。
一旦你标记了一个好的和一个坏的提交,只需使用命令git bisect run path_to_your_executable。在这里,可执行文件既可以是一个独立的脚本,也可以是对带有一些参数的测试框架的调用。
在这一步之后,git bisect会向你展示第一个错误的提交。
分步指南 案例1——手动验证提交- 输入git bisect start——它开始二等分过程
- 输入git bisect bad——它将当前提交标记为“坏”
- 输入git bisect good hash_of_last_working_commit——将最后一次提交标记为“good”,其中您确定该错误不存在
- 现在git bisect将检出当前和最后一次良好提交之间的提交。编译它并测试它。如果存在错误,请键入git bisect bad,否则键入git bisect good。
- 重复第4步,直到找不到提交
- 如果错误不存在,则实现返回0的测试,如果存在错误则返回非零(大多数测试框架已经以这种方式工作,因此在大多数情况下实现一些简单的单元测试就足够了)
- 输入git bisect start
- 输入git bisect bad
- 输入git bisect good hash_of_last_working_commit
- 输入git bisect run your_test
您可以在这里测试您的知识:
- https://github.com/lmarcell/git_practical_exercises_bisect
您可以在以下电子书中找到更多与git相关的有用信息:
- https://leanpub.com/practicalguidetoversioncontrolwithgit/
https://www.codeproject.com/Tips/5301971/Find-the-Commit-which-Broke-the-Test-in-Git