2017-09-29 1 views
3

배경어떻게 제대로 체리는 리눅스 커널 자식 트리에서 문제가 커밋을 선택합니다

나는 위의 리눅스 커널 버전 4.12 및부터 제대로 작동하지 않는 장치를 가지고있다. 특정 커밋이 어떤 문제를 일으켰는지 확인하고 싶습니다. 나의 현재의 흐름은 다음과 같습니다

  1. 는 리눅스 커널이 ID
  2. 실행 git checkout <commit id>
  3. 재구성 커널 make menuconfig 커밋하고, 컴파일, 개인에 here
  4. 클릭하면 커밋에서 로그를 저지 복사보기 make -j32
  5. 장치에 커널을 설치하고 문제가 지속되는지 확인하십시오.
  6. 그렇지 않은 경우 커밋 범위를 좁히고 t ㅇ 1 단계

문제점

나는이 지루한 과정을 겪고있는 동안, 나는 컴파일 된 커널 버전 (당신은 또한 Makefile 읽기를 통해이를 볼 수 있습니다) 다른 것을 발견했다. 그러나 Linux 커널 커밋 로그를 통해 버전이 변경되지는 않습니다. 사실, git diff <first commit id> <second commit id>을 시도한 후, 1 단계에서 리눅스 커널 커밋 로그에 따라 두 번째 커밋 ID가 첫 번째 커밋 ID보다 1 커밋 뒤에있는 경우, 웹 사이트에 반영되지 않은 변경 사항이있는 것으로 나타났습니다.

질문

는 왜 이런 일이 벌어지고? 내 장치에서 문제를 일으킨 특정 커밋을 어떻게 올바르게 발견해야합니까?

+0

커밋이 * 병합되지 않은 상태에서 * merge * commit으로 재생하려고하는 것일 수 있습니다. 아래 대답은 올바른 방향을 가리 킵니다. – 0andriy

답변

3

어떤 커밋이 기기에서 문제를 일으켰는지 제대로 확인하려면 git bisect을 사용해야합니다. 수동으로 수행했던 워크 플로를 자동화합니다. 문서 here을 참조하십시오.

이 명령은 바이너리 검색 알고리즘을 사용하여 에서 프로젝트 기록에있는 버그가있는 커밋을 찾습니다. 처음에는 에게 버그가 포함 된 것으로 알려진 "잘못된"커밋과 버그가 도입되기 전에 알려진 "좋은" 커밋을 사용하여이를 사용합니다. 그런 다음 bisect는 두 끝점 사이의 커밋을 선택하고 이 "양호"또는 "불량"인지 묻습니다. 변경 내용을 도입 한 정확한 커밋을 찾을 때까지 범위를 범위로 계속 좁 힙니다.

+0

고마워, 나는 그것을 밖으로 시도 할 것이다. 그러나 웹 사이트의 커밋 로그가 왜'git diff'와 다른지에 대한 질문에는 여전히 답하지 않습니다. 문제를 일으킨 커밋 ID를 수동으로 확인했지만 버그를 유발 한 문제가있는 파일을 생성/수정 한 커밋을 찾을 수 없습니다. –