[ English | Indonesia | 한국어 (대한민국) | español (México) | English (United Kingdom) | Deutsch | 中文 (简体, 中国) ]

Patch Guru가 되는 방법?

새로운 기능을 구현하거나 이미 존재하는 기능에 문서를 추가하는 작업을 할 때, 작업 자체에 휩쓸리거나 변경 사항 구성성의 불문율을 잊어 버리기 쉽습니다.

이 섹션에서는 사람들이 리뷰하고 싶은 패치를 만드는 방법을 안내합니다.

다음을 수행 할 수 있습니다:

  • 검토 프로세스 전반에 걸쳐 유지 관리가 더 용이하도록 패치를 구성하는 방법을 알고 있습니다.

  • 커뮤니티 구성원이 보다 쉽게 검토 할 수 있도록 패치를 구성하는 방법을 알고 있습니다.

적절한 크기

큰 패치를 검토하는 것은 매우 불편하고 시간이 많이 걸리므로, 항상 변경사항을 작은 블록단위로 나누는 것이 좋습니다.

변경 사항의 크기를 최대한 작게 유지 하는 것에 대한 매직 넘버는 없지만 총 수백 줄 미만으로 변경됩니다. 코드 변경이 거의없이 테스트가 많은 패치는 코드 변경만큼 많은 노력이 필요합니다.

드문 경우지만 변경에 대한 좋은 논리적 분석이 없고 패치가 천 줄 이상으로 늘어날 수 있습니다. 예를 들어 다른 패치에 대한 관련 테스트 변경 사항을 추출 할 수 없기 때문에 어떤 경우에는 허용되지만 권장되지는 않습니다.

하위 계층의 공통 기능에 의존하지 않는 기능의 논리적 부분이나 문서와 같은 다른 패치로 가능한 한 많이 추출하십시오.

패치가 길수록 검토하는 데 더 많은 시간이 필요합니다. 가능하면 길이를 합리적으로 유지하십시오. 불가능한 경우 코드 주석을 추가하고 패치에 도입한 변경사항을 설명하는 자세한 커밋 메시지를 작성하여 검토자를 도울 수 있습니다.

패치 체인, 의존 태그 및 Gerrit 주제들

복잡한 기능 구현 작업의 경우, 동일한 프로젝트 또는 여러 프로젝트의 여러 모듈에 변경 사항을 도입해야 할 때 종속성 관리에 매우 주의해야 합니다.

디자인 구조에 따라 선택할 수 있는 여러 옵션이 있습니다. 패치 체인의 변경사항을 구성하거나 ‘Depends-On’ 태그를 사용할 수 있습니다.

종속(Depends-On) 태그

여러 프로젝트 저장소에 변경 사항이 있는 경우 ‘Depends-On’ 태그로 종속 패치를 표시 할 수 있습니다. 태그는 커밋 메시지에 링크로 표시되어 사용자와 검토자가 변경 사항의 종속성을 추적하고 탐색하는 데 도움이 됩니다.

‘Depends-On’ 태그는 변경 사항에 대한 마커로, 사용시 모든 종속성이 떨어질 때까지 패치를 병합 할 수 없습니다.

태그는 동일한 저장소에 대해 제안된 패치에도 적용할 수 있습니다. 이 경우 변경 사항은 독립적으로 유지될 수 있을 만큼 분리되어 있으므로 리뷰 코멘트에서 변경 사항을 수정해야 하는 경우 패치별로 수행할 수 있습니다. 각 패치를 리베이스하는 경우에도 마찬가지입니다.

참고

‘Depends-On’ 태그를 사용하는 경우 기능 구현 또는 문서 변경에 대한 모든 변경 사항을 다운로드하여 기능을 테스트하거나 모든 변경 사항이 적용된 문서를 빌드해야 합니다. 이 경우 Git은 종속성을 자동으로 처리하지 않습니다.

패치 체인

어떤 경우에는 필요한 변경사항을 소규모 블록으로 세분화할 때, 변경사항 사이에 독립적 변경을 방지하는 직접적인 종속성을 피할 수 없는 경우도 있습니다. 이러한 변경 사항에 대해 작업할 때 추가 주의가 필요한 종속성을 유지하려면 체인에 변경 사항을 정리해야 합니다.

패치 체인이 있는 경우에도 릴리즈에 맞춰 두 패치가 모두 도착한다고 보장할 수 없기 때문에, 코드 변경 및 관련 테스트를 하나의 패치에 보관해야 합니다.

체인이 있는 경우 Gerrit은 Gerrit UI의 오른쪽 상단 모서리에 있는 ‘관련 변경 사항’ 열에 모든 커밋 제목을 나열하면 도움이 됩니다. 제목은 새 버전을 업로드할 때 검토하기 위해 변경 사항 사이를 탐색하는 데 도움이 되는 링크입니다.

어떻게 체인을 다룰 수 있습니까?

몇가지 권장 사항을 염두해두면 패치 체인을 다루기 쉬울 것입니다:

  • 다른 기능이나 버그 수정과 관련된 변경 사항과 함께 혼동하지 않도록 이러한 변경 사항에 대한 로컬 브런치를 항상 확인하십시오.

  • 체인을 항상 전체 체인을 다시 생성하여 하나의 변경 블록으로 처리하고 패치를 수정하여 검토 주석을 수정하거나 체인에 변경사항을 추가할 때 체인을 최신 상태로 유지합니다.

  • 체인 내에서 패치를 수정하려면 interactive rebase를 사용해야합니다:

git rebase -i HEAD^

체인 상단에서 편집할 패치 번호만큼 ‘^’ 이 필요합니다. 아니면 git-restack 를 사용하여, 적절한 git rebase 명령어를 파악할 수 있습니다.

또한 Gerritt는 패치 자체를 편집하거나 커밋 메시지만 편집하는 옵션과 작성자 수정과 같은 고급 변경 사항에 대한 몇 가지 추가 옵션을 제공합니다.

  • 전체 체인을 다운로드하려면 상단 패치를 다운로드해야 하며 Git은 체인의 모든 종속 패치를 자동으로 다운로드합니다.

  • 개별 패치를 업데이트하는 것과 동일한 방식으로 체인의 상위 패치만 수정하면 되는 경우입니다.

  • 체인에 변경 사항을 업로드하면 업데이트된 패치만 업로드됩니다. 이는 체인의 하위 패치에 대한 검토 점수가 변경되지 않음을 의미하기도 합니다.

  • 패치가 개별적으로 병합되고 전체 체인이 동시에 도착한다는 보장이 없으므로 항상 각 패치의 변경 사항을 확인하고 오른쪽 패치의 변경 사항을 적용했는지 확인합니다.

패치 체인 관리에 대한 자세한 내용은 튜토리얼 : 시리즈에서 변경 사항 개발 을 참조하시기 바랍니다.

게릿 주제

검토를 위해 변경사항을 업로드할 때 변경사항을 지정할 수 있습니다. 게리트 항목은 패치에 종속성을 추가하지 않지만, 동일한 주제를 가진 패치가 있는 모든 프로젝트의 모든 관련 변경 사항을 보여주는 항목을 기반으로 검색을 적용할 수 있습니다. 게리트는 또한 검토 페이지의 오른쪽 상단 모서리에 있는 ‘Same Topic’ 열에 해당 항목을 표시합니다.

이렇게 하면 기능 구현, 버그 수정 또는 문서화 작업을 비롯하여 관련 변경 사항을 추적할 수 있습니다.

어떻게 하면 변화를 구조화할 수 있을까요?

작업 항목이 특정 크기 이상으로 커지고 여러 패치를 업로드해야 하는 경우 패치 체인과 독립적 변경의 경우 해당 패치를 잘 구성해야 합니다.

OpenStack Compute의 경우 가상 드라이버 변경, 컴퓨팅 관리자 및 API 변경과 같이 프로젝트의 모듈별로 변경 사항을 그룹화하는 것이 좋습니다.

모듈별 변경사항을 그룹화하여 구성 요소의 계층별로 체인 또는 종속성을 구성하고 API 변경사항을 항상 최신 상태로 유지할 수 있습니다. 따라서 새로운 기능이 활성화되며 이러한 변경사항은 설계에 필요한 다른 모든 항목에 따라 달라집니다.

이 외에도 더 작은 빌딩 블록을 찾고 변경 사항을 더 작게 만드는 기능을 살펴볼 수도 있습니다. 예를 들어 나중에 새 API 기능을 구현할 때 사용할 개체 변경 사항을 먼저 구현할 수 있습니다.

변경 사항을 구조적으로 분할

좋은 커밋을 만들기 위한 기본 규칙은 커밋당 오직 하나의 “논리적 변경”이 있는지 확인하는 것입니다. 이것이 중요한 규칙인 데에는 여러가지 이유가 있습니다.

  • 변경되는 코드의 양이 적을수록, 잠재적인 결함을 더 쉽고 빠르게 검토하고 식별할 수 있습니다.

  • 나중에 변경 사항에 결함이 있는 것으로 밝혀지면, 결함이 있는 커밋을 되돌려야 할 수도 있습니다. 이 때 커밋에서 변경하고자 했던 것과 관련 없는 코드가 없다면, 훨씬 더 쉽게 수행할 수 있습니다.

  • Git의 Bisect 기능을 사용하여 문제를 해결할 때, 작은 단위로 잘 정의된 변경 사항은 코드 문제가 발생한 정확한 위치를 분리해내는 데 도움이 됩니다.

  • ``git annotate``나 ``git blame``을 사용하여 커밋 히스토리를 검색할 때, 변경 사항을 작은 단위로 잘 정의하는 것은 코드 조각이 어디서부터 왔고 왜 작성 되었는지 정확하게 분리해내는 데 도움이 됩니다.

올바른 컨텐츠

기능 구현 또는 버그 보고서와 관련이 없는 변경사항은 업로드할 수 있지만 검토자는 이를 환영하지 않습니다.

코드 또는 설명서의 개선은 문서화에서 오타를 수정하려는 경우 전체 가이드와 같이 더 큰 블록에 대해 수행해야 하는 것과 같은 큰 노력의 일환이어야 합니다. 나중에 추적할 수 있는 이와 같은 작업 항목에 대한 작업이 있는 스토리를 보고하는 것도 선호됩니다.

이는 코드 개선과 유사합니다. 커뮤니티가 크고 전 세계에 걸쳐 있기 때문에 우리는 코딩 가이드라인을 가지고 있지만, 각 개인의 스타일은 여전히 매우 다를 수 있습니다. 우리는 특정한 코딩 방식을 강요하지 않습니다. 따라서 환영받지 못하며 매우 의견 있는 논쟁의 근원이 되는 수정과 관련된 변경은 피해야 합니다.

구조 조정 방법 및 사용되지 않은 코드 스니펫을 삭제하여 코드를 읽기 쉽고 쉽게 유지관리할 수 있는 코드 리팩터링 작업의 경우 프로젝트 팀과 협의하여 스토리보드에 먼저 보고한 후 관련 변경 사항을 Gerrit에 업로드하여 검토하도록 적극 권장합니다.