수색…


통사론

  • git bisect <subcommand> <options>

  • git bisect start <bad> [<good>...]

  • git bisect reset

  • git bisect good

  • git bisect bad

이진 검색 (git bisect)

git bisect 사용하면 바이너리 검색을 사용하여 버그를 git bisect 커밋을 찾을 수 있습니다.

두 개의 커밋 참조를 제공하여 세션을 양분 (bisect)하는 것으로 시작하십시오 : 버그 이전에 좋은 커밋, 버그 이후 커밋이 잘못되었습니다. 일반적으로 잘못된 커밋은 HEAD 입니다.

# start the git bisect session
$ git bisect start

# give a commit where the bug doesn't exist
$ git bisect good 49c747d

# give a commit where the bug exist
$ git bisect bad HEAD

git 은 바이너리 검색을 시작한다 : 리비젼을 반으로 분할하고 저장소를 중간 리비전으로 전환한다. 코드를 검사하여 개정판의 양호 여부를 확인합니다.

# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good

# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad

git 은 지침에 따라 나쁜 버전의 나머지 부분 집합에 대해 계속 이진 검색을 실행합니다. git 은 플래그가 올바르지 않는 한 버그가 도입 된 리비전을 정확히 나타내는 단일 리비전을 제공합니다.

이후 git bisect reset 을 실행하여 bisect 세션을 끝내고 HEAD로 돌아 간다.

$ git bisect reset

버그를 확인할 수있는 스크립트가있는 경우 다음을 사용하여 프로세스를 자동화 할 수 있습니다.

$ git bisect run [script] [arguments]

여기서 [script][script] 의 경로이고 [arguments] 는 스크립트에 전달되어야하는 인수입니다.

이 명령을 실행하면 스크립트의 종료 코드에 따라 각 단계에서 git bisect good 또는 git bisect bad 를 실행하면 자동으로 이진 검색을 통해 실행됩니다. 0으로 종료하면 good 함을 나타내지 만 1-124, 126 또는 127로 종료하면 불량을 나타냅니다. 125는 스크립트가 해당 리비전을 테스트 할 수 없음을 나타냅니다 ( git bisect skip 트리거합니다).

반 자동으로 잘못된 커밋 찾기

당신이 master 브랜치에 있고 뭔가가 예상대로 작동하지 않는다고 상상해보십시오 (회귀가 도입되었습니다). 그러나 당신은 어디에 있는지 모릅니다. 아시다시피, 그것은 마지막 릴리스 (예 : 태그가 붙어 있거나 커밋 해시를 알고 있으며, 여기에서 old-rel 취할 수 있음)에서 작업 중입니다.

힘내는 매우 낮은 단계 수 (2 진 검색)로 회귀를 도입 한 잘못된 커밋을 찾는 데 도움을줍니다.

우선 bisecting 시작 :

git bisect start master old-rel

이것은 master 가 깨진 리비전 (또는 최초의 깨진 버전)이고 old-rel 이 마지막으로 알려진 버전임을 알려줍니다.

자식은 두 커밋 중간에 분리 된 헤드를 체크 아웃합니다. 이제 테스트를 할 수 있습니다. 작동 여부에 따라 다름

git bisect good

또는

git bisect bad

. 이 커밋을 테스트 할 수없는 경우 git reset 시도하고 그 커밋을 테스트하면됩니다.

몇 단계 후에 자식은 잘못된 커밋 해시를 출력합니다.

양분 과정을 중단시키기 위해서 그냥 발행하십시오.

git bisect reset

git은 이전 상태를 복원 할 것이다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow