다음과 같은 문제가 있습니다.
- 버전
master
이 잘 작동합니다. - 이전의 마지막 태그 버전
master
(예last
: 버그가 있음) - 동료는
last
특정 버그에 대한 수정 패치가 필요합니다.
괜찮아. 우리 친구에게 git bisect
버그를 수정 한 개정판을 요청합시다 .
git bisect start
git bisect bad last
git bisect good master
그러나 그것은 작동하지 않을 것입니다.
일부 좋은 rev는 나쁜 rev의 조상이 아닙니다.
이 경우 git bisect가 제대로 작동하지 않습니다.
좋은 회전 수와 나쁜 회전 수를 착각 할 수 있습니까?
이것을 극복하기위한 힌트가 있습니까? 문서에서 뭔가를 놓쳤나요?
답변
git 2.7부터 –term-old 및 –term-new 인수를 사용할 수 있습니다.
예를 들어 다음과 같이 문제 해결 커밋을 식별 할 수 있습니다.
git bisect start --term-new=fixed --term-old=unfixed
git bisect fixed master
git bisect unfixed $some-old-sha1
테스트 할 때 git bisect fixed
또는 git bisect unfixed
적절하게 말하십시오 .
2.7 이전의 git 버전에 대한 이전 답변
나쁜 것은 좋은 것을 의미하고 좋은 것은 나쁜 것을 의미한다고 생각하도록 일시적으로 훈련하는 대신 별칭을 만들어 보는 것은 어떨까요?
다음을 ~/.gitconfig
추가하십시오.
[alias]
bisect-fixed = bisect bad
bisect-unfixed = bisect good
따라서 문제 해결 커밋 식별을 시작할 수 있습니다.
$ git bisect start
$ git bisect-fixed master
$ git bisect-unfixed $some-old-sha1
테스트 할 때 git bisect-fixed
또는 git bisect-unfixed
적절하게 말하십시오 .
답변
나는 단지 “속임수”git과 좋은 <=> 나쁜 의미를 바꾼다.
즉, “나쁨”을 문제를 나타내지 않는 것으로 간주하여 패치를 기반으로하는 “좋은”버전이 아닙니다.
어쨌든 좋은 것과 나쁜 것은 꽤 주관적인 개념입니다. 🙂
git bisect start
git bisect good last
git bisect bad master
답변
git bisect run
내가 Perl의 prove
명령 (자동 테스트를 실행 함)으로했던 것처럼 사용하고 있다면 good
, 그리고 bad
. 테스트의 성공은 종료 코드로보고됩니다.
다음에서 실행하는 프로그램의 종료 코드를 무효화하는 유효한 Bash 구문을 찾았습니다 git bisect run
.
git bisect start
git bisect bad HEAD # last revision known to PASS the tests
git bisect good $LAST_FAIL_REVISION # last revision known to FAIL the tests
git bisect run bash -c "! prove"
이것은 나에게 의해 실행되는 테스트 를 통과 하는 첫 번째 개정판을 제공 했습니다 prove
.
답변
힘내 이제 사용할 수있게 old
하고 new
그들을 먼저 정의하지 않고. git bisect start
추가 인수로 커밋없이 호출 한 다음 다음을 호출하여 이분법을 올바르게 시작해야합니다.
git bisect old <rev>
git bisect new <rev>
https://git-scm.com/docs/git-bisect#_alternate_terms
이것은 본질적으로 @MarcH가 구현해야한다고 제안한 것입니다.
답변
망할 놈의 별명은, 그러나 조건 좋은 아이디어입니다 fixed
및 unfixed
보다 동일한 문제가 good
와 bad
: 당신이 그 (것)이 호환 될 수 없습니다 모두 회귀 분석 및 진행. 어떤 방식 으로든 작동하는 단어를 찾는 것은 쉽습니다. 좋은 것이나 나쁜지에 대한 선입견없이 본질적으로 중립적 인 원래 이진 검색 용어에서 단어를 선택하기 만하면됩니다. 예를 들면 :
git config --global alias.bisect-high 'bisect bad'
git config --global alias.bisect-low 'bisect good'
이와 같은 중립 용어 를 사용하면 회귀 또는 수정을 찾고 있든 상관없이 항상 git bisect-high
(또는 git bisect-upper
, 또는 git-bisect max
, … 선택!)을 입력 할 수 있습니다 .
안타깝게도 git bisect 개발자는 기존 용어를 단순히 재사용 할 수 없습니다. 사용자 인터페이스는 일반적으로 git의 관심사가 아닙니다. http://stevebennett.me/2012/02/24/10-things-i-hate-about-git/