[git] 첫 번째 GOOD 커밋을 찾기 위해 git bisect를 어떻게 사용할 수 있습니까?

다음과 같은 문제가 있습니다.

  • 버전 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가 구현해야한다고 제안한 것입니다.


답변

망할 놈의 별명은, 그러나 조건 좋은 아이디어입니다 fixedunfixed보다 동일한 문제가 goodbad: 당신이 그 (것)이 호환 될 수 없습니다 모두 회귀 분석 및 진행. 어떤 방식 으로든 작동하는 단어를 찾는 것은 쉽습니다. 좋은 것이나 나쁜지에 대한 선입견없이 본질적으로 중립적 인 원래 이진 검색 용어에서 단어를 선택하기 만하면됩니다. 예를 들면 :

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/


답변