Git 分治以定位代码错误
下面的方法使用分治来定位程序代码中的错误(不要与git bisect混淆)。 我用过一次,它很有用。在git中有更好的方法吗? 把主枝拖得到处都是好形式吗 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
* 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个步骤:
(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
?这似乎正是你应该使用的。解释一下为什么你认为这对你没有帮助,这对我们更好地理解你的问题很有帮助。