Git 대분. - 디버깅이 쉬워요.
우리는 모두 그곳에 있었다. 나에게 이것은 일주일 전에 일어났다. 나는 침대에 앉아서 나의 IDE를 쳐다보며 내가 그 잘못된 코드를 썼다고 말했다. "나는 나만 탓한다. 이것은 확실하다."나는 자신에게 웃었다. 그러나 1초가 지나자 전구 하나에서 새로운 생각이 떠올랐다.💡 만약 내가 Git를 사용하여 나의 모든 제출을 훑어보고 나의 버그를 찾아낼 수 있다면?다행히도 구글에서 잠깐 검색한 후에 나는 이것이 가능하다는 것을 발견했다. 간단한git-bisect 명령을 사용하는 것이다.
이 강좌에서 우리는
git bisect
명령을 탐색할 것이다.그것이 어떻게 작동하는지, 왜, 그리고 그것을 어떻게 사용하는지, 너는 그것이 나처럼 유용하고 강하다는 것을 발견할 수 있기를 바란다.🔮Git 디버깅 사용
알 수 있는 바와 같이git에 있어서 모든 것은 제출에 관한 것이기 때문에 지점은 단일 제출을 가리키는 바늘에 불과하다.이것은git가 반복적으로 제출할 수 있도록 하고, 두 개의 디버깅 도구를 제공하여 디버깅 코드를 도와줍니다. 파일 주석 ('git'라고도 함) 과 바이너리 검색입니다.
If you’d like to learn more about how git works under the hood and stores its data check out my recent article and git documentation for further reading.
파일 메모 — 꾸짖다
파일 주석은 수정된 모든 파일을 마지막으로 제출하는 줄을 표시하고
git blame
명령을 사용합니다. 이것은 보통 오류를 추적하고 누가 원흉인지 알 수 있는 가장 유용한 도구입니다.만약 git의 파일 주석에 익숙하지 않다면, 나는gitdocumentation에서 읽는 것을 강력히 건의합니다.바이너리 검색 — 이분 찾기
특정 지점의 모든 제출 역사에 대해 이진 검색을 통해 어느 제출을 포지셔닝하는지 문제가 발생했습니다.이것은
git bisect
명령을 통해 완성된 것입니다. 이 명령은 모든 제출을 검사하고 테스트를 실행하여 이 제출에 문제가 있는지 확인할 수 있습니다.버그를 찾고 있지만 어디서 찾을 수 있는지 알 수 없고, 지난번 좋은 제출 이후 수백 번의 제출이 있었다면, git bisect
명령이 답입니다.📽 간단한 장면
만약 당신이 새로운 지점에서 일한다고 가정하면...
🥳 너는 최종적으로 좋은 작업 제품으로 좋은 점에 도달할 때까지 한동안 일했다.
😌 사용자도 책임감 있는 개발자로서 나무를 깨끗하게 유지하기를 원하기 때문에 이 과정에서 제출이 추가되었고 다음과 같은 제출 역사를 가지고 있을 수 있습니다.
*-----*--*---271cb1c (current)
💎 코드를 더 좋고 깨끗하게 재구성할 때가 되었다. 결국 다음과 같은 제출 역사를 얻었다.*-----*--*---271cb1c-*-66e0075-*-...--*---9c07a95 (current)
😰 불행하게도, 당신의 코드는 현재 제출할 때 정상적으로 작동하지 않습니다. 분명히 코드의 일부분이 어딘가에서 파괴되었습니다.🧐 재구성하기 전에, 이것은 틀림없이 유효할 것입니다. commit
271cb1c
을 추가할 때, 이것은 commit271cb1c
과9c07a95
사이의 코드에 버그가 있다는 것을 의미합니다. 유일한 문제는...어떻게 생각하세요?👑 입력
git bisect
.🛠 어떻게 그것을 사용합니까
클린트 이스트우드의 계발을 받아 나는 이 부분을'좋은 사람, 나쁜 사람, 무당'의 이야기로 상상하는 것을 좋아한다.
🧙🏼♂️ 길잡이
git bisect start
명령을 실행하여 git bisect
마법사를 시작합니다.😈 나쁘다
git
에서 바이너리 검색은 오류를 포함할 수 있는 제출 중복을 절반으로 나누고 가능한 제출을 하나로 축소함으로써 검색 범위를 매우 중요하게 한다.git bisect
마법사가 검색 범위가 무엇인지 정의하는 방법은 git bisect bad
명령을 실행하는 것입니다. 이 명령은 git
제출이 끊겼고 전염성 오류가 포함되어 있음을 알려 줍니다.😇 좋다
나쁜 제출은 작용역의 한 부분일 뿐입니다. 현재 우리는
current
지난번에 알고 있는 좋은 제출이 언제인지, git-bisectgit
명령을 실행함으로써 이 점을 해야 합니다. 예를 들어 우리의 예에서 좋은 제출은 제출<good_commit>
이기 때문에 우리는 다음 명령을 실행할 것입니다.git bisect 271cb1c
이 명령271cb1c
을 실행하면 바이너리 검색을 사용하여 제출 서명을 시작하고 제출할 때마다 응용 프로그램을 구축하고 오류가 있는지 확인합니다. 남은 작업은 git
또는 git
마지막 git bisect
명령의 상태를 알려 가능한 제출 범위를 계속 좁히는 것입니다.잘못된 제출을 찾을 때까지 이 동작을 반복합니다.제출
git bisect bad
시 서명하고 오류가 발생하기 전에 오류가 발생했다고 가정하면 다음을 실행합니다.git bisect bad
🙌🏻 Git 착해요.
현재
git bisect good
는 제출66e0075
과 제출git
사이의 제출을 확정하는 데 필요한 모든 내용, 즉 잘못 도입된 제출을 갖추고 있다.66e0075
최종적으로 버그가 있는 제출을 찾으면 버그가 발생할 수 있는 원인을 찾을 수 있도록 모든 정보를 출력합니다. 예를 들어 다음과 같습니다.$ git bisect bad
66e00756e887030abcbde19ac3e10a7c2942036a is the first bad commit
commit 66e00756e887030abcbde19ac3e10a7c2942036a
Author: Noaa Barki <[email protected]>
Date: Sun Apr 26 12:10:56 2020 +0300
fix: added client
base/client.go
base/client_test.go
1 files changed, ......
create mode 100644 base/client_test.go
🧙🏼♂️길잡이
매번 여행할 때처럼 중요한 것은 모든 것이 시작되는 곳으로 돌아가는 것이다. 그렇지 않으면 우리는 과거의 제출에서 서명을 받고 결국 이상한 지점 상태에 처하게 될 것이다.간단한
271cb1cis
명령을 실행하여 현재로 돌아왔습니다. 이 명령은 마법사를 닫고 git
를 시작하기 전의 위치로 초기화합니다.🤖 자동화
이것이 바로
git bisect reset
이 진정으로 역할을 발휘하는 부분인 git bisect
하위 명령 중 하나는 HEAD
명령을 매개 변수로 받아들이고 완전 자동화를 허용한다git bisect
!git bisect run <cmd>...
이 명령git bisect
을 실행하면 서명된 제출마다 자동으로 실행됩니다git bisect run
. 이 호출된 반환값을 사용하여 첫 번째 중단된 제출을 찾을 때까지 제출이 좋은지 나쁜지 확인합니다.어떻게 그것을 사용합니까
우선, 나쁜 제출과 좋은 제출을 제공함으로써
git bisect
대분의 범위를 알려준다.$ git bisect start <bad_commit> <good_commit>
그리고 당신git
은 당신의 명령으로 cmd
이 당신을 위해 모든 일을 하도록 합니다. 예를 들어$ git bisect start HEAD 991debbc8b9e05ddc217023a898109822a70dd60
$ git bisect run npm run test
이 명령은 양호한 제출 또는 0이 아닌 오류 제출을 위해 0을 종료하는 스크립트일 수 있습니다.🌸 총결산
이 강좌에서
git
명령을 사용하여 오류를 추적하는 방법을 배웠습니다.그 밖에 당신은 그것을 어떻게 자동화하는지 배워서 디버깅 시간을 크게 줄였습니다.나는 네가 앞으로 git bisect run
버그를 찾기 위해 좋은 해결 방안을 찾을 수 있기를 바란다.우리 팀원들 너무 고마워datreeio🙏🏻
Reference
이 문제에 관하여(Git 대분. - 디버깅이 쉬워요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/noaabarki/git-bisect-and-debugging-is-easy-4706텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)