我有以下问题:
master
工作正常master
(比如说last
)有一个buglast
修改那个特定的错误好的.让我们的朋友git bisect
去修复修复bug的修改:
git bisect start
git bisect bad last
git bisect good master
Run Code Online (Sandbox Code Playgroud)
但这不会起作用:
一些好的转速不是坏转的祖先.
在这种情况下,git bisect无法正常工作.
也许你错了好转和坏转?
有什么提示可以克服这个问题?我在文档中遗漏了什么吗?
我前一段时间尝试过git bisect,这对我很有帮助,但显然我没有阻止它.当我做git状态时,我仍然得到:
You are currently bisecting.
(use "git bisect reset" to get back to the original branch)
Run Code Online (Sandbox Code Playgroud)
我真的不想重置到任何地方,我只是想停止二等分.这真的只是摆脱这个消息的问题.
Doc's缺乏一个例子......你如何使用bisect.insort_left)_
基于密钥?
试图基于密钥插入.
bisect.insort_left(data, ('brown', 7))
Run Code Online (Sandbox Code Playgroud)
把插入放在data[0]
.
来自docs ...
bisect.insort_left(
A,X,LO = 0,HI = LEN(a)中)
插入X在一个按排序顺序.这相当于a.insert(bisect.bisect_left(a, x, lo, hi), x)
假设a已经排序.请记住,O(log n)搜索由缓慢的O(n)插入步骤控制.
样品用法:
>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
>>> data.sort(key=lambda r: r[1])
>>> keys = [r[1] for r in data] # precomputed list of keys
>>> data[bisect_left(keys, 0)]
('black', 0)
>>> data[bisect_left(keys, 1)]
('blue', 1)
>>> data[bisect_left(keys, 5)]
('red', 5)
>>> data[bisect_left(keys, 8)] …
Run Code Online (Sandbox Code Playgroud) 我本来想做的git bisect run 'bundle && bundle exec cucumber'
.
我想在命令行上执行此操作 - 我不想编写shell脚本.
我一直在阅读hg bisect
和有趣的是能够知道哪个版本引入了一个错误,但我想知道人们使用这些信息的原因.我唯一能想到的是尝试缩小哪些日期可能需要数据修复,如果它是导致某种形式的无效数据的错误.
更新: 我想在发布之前我完全误解了目的.我在想我会进行调试,找到引入错误的行,然后使用bisect.似乎bisect是一种方式让我不必花时间猜测bug可能在哪里并放置断点或记录.相反,我应该编写一个现在失败的小测试,传入过去的修订版并让二等分告诉我问题的来源.
我有一个包含大约800个变更集的Mercurial存储库,我需要找到第一个变量集,其中出现了单词Example.该单词出现在.php文件中,而不是在提交注释等.
什么是最快/最简单的方法呢?
Java的bisect模块中是否有Java的等价物?使用Python的bisect,您可以使用方向进行数组二分.例如bisect.bisect_left
:
找到列表中项目的正确插入点以维护排序顺序.参数lo和hi可用于指定应考虑的列表的子集; 默认情况下,使用整个列表.
我知道我也可以通过二进制搜索手动执行此操作,但我想知道是否已有一个库或集合执行此操作.
当我在日食中做一个hg bisect时,我喜欢我能看到过去曾经标记过的所有坏东西和商品.
有没有办法在命令行获取该信息?
我真的相信在一个问题上有一个提交是一个好习惯.我确定我在"最佳实践"这样的文章中的某处读过它.
因此,我的工作流程如下:
git checkout -b new-issue
.squash
提交并将rebase
它们转换为当前的主题分支.git revert
提交,找到错误,修复它,并将新补丁提交到专题分支.我不会更改远程存储库的历史记录.但今天,我听到以下工作流程后感到很惊讶:
merge --no-ff
合并与专题分支问题分支(所以我们必须"合并提交",我们可以revert
).git bisect
用来查找错误.根据第一种方法,我们将有一个干净的git历史,并且不知道在开发过程中使用的开销分支.
根据第二种方法,我们将有一个非常混乱的历史,有很多丑陋,不必要的合并和承诺只有一个问题.但是,我们可以git bisect
用来查找错误.(也许这对于重构更好?)
您对这两种方法有什么利弊?
你使用哪种方法,为什么?
在实践中,你真的习惯git bisect
了找虫子吗?(我还没......)
我喜欢使用git bisect尤其是用于解决回归错误。然而,我意识到它也可能过于细化:它指出了确切的提交消息,如果我只是想知道某个错误在哪个版本中发生了怎么办(我的意思是一个 git 标签)?
以上不需要相互排斥,我可以先找出导致错误的标签,然后简单地在该标签上重新运行另一个 git bisect。