Git 分治以定位代码错误

Git 分治以定位代码错误,git,Git,下面的方法使用分治来定位程序代码中的错误(不要与git bisect混淆)。 我用过一次,它很有用。在git中有更好的方法吗? 把主枝拖得到处都是好形式吗 GIT中的分而治之是什么样子的 错误可能存在于代码的任何部分。 具有所有分支的两级二叉树如下所示: * 452a8ff (4/4) i | * 32d0498 (3/4) h |/ * 86de3c2 (2/2) g | * 3740f7e (2/4) f | | * 4cf909d (1/4) e | |/ | * e9dc3a4 (1/2

下面的方法使用分治来定位程序代码中的错误(不要与git bisect混淆)。 我用过一次,它很有用。在git中有更好的方法吗? 把主枝拖得到处都是好形式吗

GIT中的分而治之是什么样子的 错误可能存在于代码的任何部分。 具有所有分支的两级二叉树如下所示:

* 452a8ff (4/4) i
| * 32d0498 (3/4) h
|/
* 86de3c2 (2/2) g
| * 3740f7e (2/4) f
| | * 4cf909d (1/4) e
| |/
| * e9dc3a4 (1/2) d
|/
* 832edd8 (1/1) c
* a4ca550 'b'
* eafd06c 'a' 
分数是分支名称。 分支1/1包含整个代码。 分支1/2包含上半部分,分支2/2包含下半部分。 分支1/4、2/4、3/4和4/4包含四分之一

每个分治循环有4个步骤:

  • 如果需要,将头+主分支移动到上一个提交
  • 删除一部分代码、编译和测试
  • 提交,其中提交消息为“错误”或“无错误”
  • 创建到当前提交的新分支,其中分支名称为 该派系受到了考验
  • 该方法使用git重置。 警告:在每次git重置之前,请确保提交文件时有一个指向提交的分支

    例子 下面的示例使用“分治”查找代码中的错误

    提交并创建初始分支:

    (already on branch to be debugged, reset not needed)
    (edit,compile,test)
    $ git commit -am "error: description of error we want to locate the source of"
    $ git branch 1/1
    $ git log --oneline --decorate --graph --all
    * 832edd8 (HEAD, master, 1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a'
    
    错误在分支1/1中。 测试分支1/1的第一部分:

    (already on branch 1/1, reset not needed)
    (edit,compile,test)
    $ git commit -am "noError"
    $ git branch 1/2
    $ git log --oneline --decorate --graph --all
    * e9dc3a4 (HEAD, master, 1/2) noError
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    $ git reset --hard 1/1
    (edit,compile,test)
    $ git commit -am "error"
    $ git branch 2/2
    $ git log --oneline --decorate --graph --all
    * 86de3c2 (HEAD, master, 2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a'
    
    分支1/2中没有错误。 测试分支1/1的其他部分:

    (already on branch 1/1, reset not needed)
    (edit,compile,test)
    $ git commit -am "noError"
    $ git branch 1/2
    $ git log --oneline --decorate --graph --all
    * e9dc3a4 (HEAD, master, 1/2) noError
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    $ git reset --hard 1/1
    (edit,compile,test)
    $ git commit -am "error"
    $ git branch 2/2
    $ git log --oneline --decorate --graph --all
    * 86de3c2 (HEAD, master, 2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a'
    
    分支2/2中出现错误。 测试分支2/2的第一部分:

    (already on branch 2/2, reset not needed)
    (edit,compile,test)
    $ git commit -am "noError"
    $ git branch 3/4
    $ git log --oneline --decorate --graph --all
    * 32d0498 (HEAD, master, 3/4) noError
    * 86de3c2 (2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    $ git reset --hard 2/2
    (edit,compile,test)
    $ git commit -am "errorFound"
    $ git branch 4/4
    $ git log --oneline --decorate --graph --all
    * 452a8ff (HEAD, master, 4/4) errorFound
    | * 32d0498 (3/4) noError
    |/
    * 86de3c2 (2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    分支3/4中没有错误。 测试分支2/2的其他部分:

    (already on branch 2/2, reset not needed)
    (edit,compile,test)
    $ git commit -am "noError"
    $ git branch 3/4
    $ git log --oneline --decorate --graph --all
    * 32d0498 (HEAD, master, 3/4) noError
    * 86de3c2 (2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    $ git reset --hard 2/2
    (edit,compile,test)
    $ git commit -am "errorFound"
    $ git branch 4/4
    $ git log --oneline --decorate --graph --all
    * 452a8ff (HEAD, master, 4/4) errorFound
    | * 32d0498 (3/4) noError
    |/
    * 86de3c2 (2/2) error
    | * e9dc3a4 (1/2) noError
    |/
    * 832edd8 (1/1) error: description of error
    * a4ca550 'b'
    * eafd06c 'a' 
    
    在分支4/4中发现错误

    缩略版 四步分治循环:

    reset & edit
    commit & branch
    
    例如:

    1/1 error: description
    1/2 noError
    2/2 error
    3/4 noError
    4/4 errorFound
    
    分数是分支名称。分支1/1包含整个代码。分支1/2包含上半部分,分支2/2包含下半部分。分支1/4、2/4、3/4和4/4包含四分之一

    拥有一半(或四分之一,或…)代码通常无助于确定错误,因为错误可能取决于代码库的上下文(而不是数量)。意思:提交可以引入功能上依赖于其他提交的其他更改的更改。
    简单地删除一半的代码可能会损害这些函数依赖关系,并且代码可能无法工作,因为缺少所述依赖关系

    git repo会逐个提交查找错误,而不是逐个文件集查找错误。

    使用提交时,“分而治之”方法的正确工具是,如上所述

    你的问题是?如果你想创建一个问答式的问题,清晰地表达一个问题并发布答案。还有一件事:你知道git对分吗?问题是:在git中有更好的分而治之的方法吗?把主枝拖得到处都是好形式吗?我已经看过git-bisect,它是为了其他东西。我认为值得重申的是:为什么不在这里使用
    git-bisect
    ?这似乎正是你应该使用的。解释一下为什么你认为这对你没有帮助,这对我们更好地理解你的问题很有帮助。