본 문서는 Git Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
Section 41.1: 이진 검색 (git bisect 를 이용하여 결함을 유발하는 커밋 찾기)
git bisect
명령어는 이진 검색 (binary search) 을 이용하여 어떤 커밋이 결함을 발생시켰는지를 찾을 수 있도록 도와준다.
두개의 커밋 reference 정보를 제공하여 bisect 세션을 시작한다: 결함이 발생하지 않음이 확인된 "good commit" 과 결함이 발생한 상태인 "bad commit" 두가지 커밋 정보가 필요하다. 일반적인 경우, "bad commit" 은 HEAD 가 된다.
# git bisect 세션을 시작한다
$ git bisect start
# 결함이 존재하지 않음이 확인된 커밋 정보를 기술한다
$ git bisect good 49c747d
# 결함이 존재함이 확인된 커밋 정보를 기술한다
$ git bisect bad HEAD
이제 git 은 이진 검색을 시작할 것이다: 두 커밋 사이의 revision 들을 절반으로 나누고 저장소의 내용을 중간에 해당하는 revision 으로 전환한다.
코드나 산출물을 검사하여 해당 revision 이 "good" 혹은 "bad" 중 어디에 해당하는지를 확인한다:
# git 에게 현재 revision 이 "good" 에 해당함을 알린다
# 이는 이 revision 에서는 결함이 존재하지 않음을 의미한다
$ git bisect good
# 만약 현재 revision 에서 동일한 결함이 검출되었다면,
# git 으로 하여금 현재 revision 이 "bad" 에 해당한다고 알린다
$ git bisect bad
git 은 사용자의 입력에 기반하여 남아있는 "bad" revision 들에 대해 이진 검색을 계속하여 수행할 것이다. 사용자가 각 revision 에 대해 "good" 이나 "bad" 정보를 잘못 입력하지 않은 한, 결함을 최초 유발시킨 최종 하나의 revison 을 지목하여 줄 것이다.
모든 작업을 끝마치고 나면, git bisect reset
를 실행하여 bisect 세션을 종료하고 HEAD 로 복귀하도록 한다.
$ git bisect reset
만약 결함 발생 여부를 확인할 수 있는 script 가 있다면, 위에서 소개된 공정을 아래와 같이 자동화할 수 있다:
$ git bisect run [script] [arguments]
여기서 [script] 는 결함을 확인하는 script 의 경로이며 [arguments] 해당 script 에 전달하여야 하는 파라미터를 의미한다.
위 명령 실행시, 자동으로 이진 검색이 진행되며, 매 단계마다 주어진 script 의 종료 코드 (exit code) 에 따라 git bisect good
혹은 git bisect bad
를 수행하여 줄 것이다. 종료 코드가 0 이라면 "good" 을 의미하며, 만약 종료 코드가 1-124, 126, 혹은 127 인 경우에는 "bad" 를 의미한다. 종료 코드 125 는 해당 script 가 주어진 revision 을 테스트하지 못했음을 의미한다 (이는 git bisect skip
을 실행하게 될 것이다).
[출처] https://books.goalkicker.com/GitBook/ (CC BY-SA)
'번역 > Git Notes for Professionals' 카테고리의 다른 글
42.1: 특정 범위의 열에 대해서만 git blame 수행하기 (0) | 2020.02.17 |
---|---|
42: Blame 하기 (0) | 2020.02.14 |
40.3: 특정 버전 tag 이후로의 커밋들 표시하기 (gitk 이용) (0) | 2020.02.13 |
40.2: 두 커밋 사이의 모든 커밋들을 출력하기 (gitk 이용) (0) | 2020.02.13 |
40.1: 특정 파일에 대한 커밋 history 를 확인하기 (gitk 이용) (0) | 2020.02.13 |