소프트웨어 엔지니어로서 git bisect에 대해 알아야 하는 이유

10126 단어 gitbashtoolingwebdev
Git은 아마도 소프트웨어 개발 역사상 가장 중요하고 혁신적인 오픈 소스 프로젝트 중 하나일 것입니다. 그리고 수년에 걸쳐 자신이 무엇을 하고 있는지 정확히 알지 못하는 개발자의 삶을 더 쉽게 만들어주는 멋진 도구를 추가했습니다. 그 많은 멋진 도구 중 하나는 git bisect입니다.

당신이 묻는 git bisect는 무엇입니까?



소프트웨어 엔지니어링 배경을 가지고 있다면 binary search이라는 검색 알고리즘에 대해 들어보셨을 것입니다.
, 이 검색 알고리즘의 핵심은 일련의 숫자에서 유지되는 진행 순서가 있고 특정 항목을 검색하려는 경우 이 반복 접근 방식을 사용하여 각 반복에서 검색 공간을 반으로 줄일 수 있음을 나타냅니다. 예를 들어 , 점 "A"와 또 다른 점 "B"를 알고 있고 이 두 점은 각 반복에서 그 사이에 점진적 시퀀스가 ​​있는 경우 검색 공간을 반으로 줄일 수 있습니다.
이제 git bisect는 이 동일한 알고리즘을 사용하지만 코드베이스에서 엉망인 것을 찾는 데만 사용합니다.
그것은 당신이 전혀 모르는 다른 커밋으로 인해 코드에서 버그에 직면했다고 가정하지만 버그가 거기에 없었다고 확신하고 모든 것이 잘 작동했을 때 커밋을 알고 있을 것입니다. 똥이 진짜가되기 전에?). 이제 어떤 커밋이 팬을 강타했는지 파악해야 합니다. git bisect는 좋은 커밋과 현재 커밋 사이의 이진 검색을 사용하여 이 작업을 수행하고 각 반복에서 시작할 중간 기반을 제공합니다.

우리는 예제를 사용하여 이것을 할 것입니다



이 데모 프로젝트에서는 bisect를 사용할 수 있는 넓은 공간을 보여주기 위해 몇 가지 변경 사항이 포함된 5개의 다른 커밋을 만들었습니다.
  • 먼저 현재 헤드가 확실히 문제에 직면한 잘못된 커밋이라고 가정합니다. 따라서 git 기록을 기록하여 모든 것이 제대로 작동한다고 확신하는 커밋을 찾습니다(아마도 모든 것이 작동한 마지막 프로덕션 빌드). , 터미널을 열고 다음을 누르십시오.git log

  • commit ec802e7ad3547eab0475a95ea8165ad39a096ed6 (HEAD -> master)
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Fri Aug 5 00:04:49 2022 +0530
    
        feat: commit 5
    
    commit aef6d0f4f4a8c9404a07fbb07805c14afb1913e4
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Fri Aug 5 00:04:36 2022 +0530
    
        feat: commit 4
    
    commit 8dae945d335e488f38faa7bb2d32f963897a349c
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Fri Aug 5 00:04:23 2022 +0530
    
        feat: commit 3
    
    commit 114b05be372ddb6e6674fe3c3270161ef549a4c4
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Fri Aug 5 00:04:11 2022 +0530
    
        feat: commit 2
    
    commit 53687b93af435041d1f2b1895839564e6c1f97cd
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Fri Aug 5 00:03:53 2022 +0530
    
        feat: commit 1
    
    commit 7e33d507ce19a4eba677ecadb9f74ea4f3b3d1f6
    Author: Akashdeep <adeep8961@gmail.com>
    Date:   Thu Aug 4 23:58:25 2022 +0530
    
        init: first commit
    

    이 데모에서는 커밋 번호 1이 확실히 안전한 것이라고 가정하므로 커밋 1에 대한 커밋 해시를 복사하십시오.
  • bisect 세션 시작 및 초기 커밋 지점 표시



  • 터미널에서 bisect 세션 표시기를 볼 수 있습니다.
    이제 현재 헤드/커밋을 불량으로 표시하겠습니다.

    git bisect bad
    

    그런 다음 이전에 복사한 커밋 ID를 첫 번째 이등분을 수행하기 위한 좋은 커밋으로 표시해야 합니다.

     git bisect good 53687b93af435041d1f2b1895839564e6c1f97cd
    


    첫 번째 검색 공간을 표시한 후 이분법이 시작됩니다.



    이등분 후 git은 테스트할 공간의 정확한 중앙에 있는 커밋으로 자동으로 체크아웃합니다. 이제 이 커밋에 대한 코드를 테스트하고 이것이 여전히 잘못된 커밋이라고 결정한 후 이 커밋을 새로운 잘못된 커밋으로 표시할 수 있습니다. bisect 과정을 계속하십시오.
    데모를 위해 이것을 잘못된 커밋으로 표시하겠습니다.

    git bisect bad
    



    이제 git은 커밋 2를 확인하고 이것이 작동하는 코드 커밋이라고 결정합니다(마지막 오류가 발생한 위치를 정확히 찾기 위해 이 프로세스를 계속할 수 있습니다).

    git bisect good
    




    이제 bisect 세션이 끝난 후 볼 수 있듯이 우리는 모든 기록을 가지고 있으며 커밋에서 코드가 정확히 중단되었습니다.
    이제 커밋 3(잘못된 커밋)에 대한 커밋 해시를 복사하고 다음을 사용하여 이 커밋에 대한 변경 사항을 확인할 수 있습니다.

    git show 8dae945d335e488f38faa7bb2d32f963897a349c
    

    결정하면 이 변경 사항은 격리되고 간단히 되돌릴 수 있습니다. 이제 먼저 bisect 세션을 종료하고 실행하십시오.

    git bisect reset
    git revert 8dae945d335e488f38faa7bb2d32f963897a349c
    


    프로덕션 수준의 문제를 성공적으로 디버깅했습니다(예!!!!!).

    게시물에 댓글을 달아 더 많은 포인트를 추가하거나 전반적인 품질을 개선하세요.

    다른 플랫폼에서도 저를 팔로우하세요.
  • Github

  • 좋은 웹페이지 즐겨찾기