GitNotes.41-1.md
본 문서는 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)

반응형

+ Recent posts