코드 변경사항 제출

이 페이지에서는 검토를 요청하고 변경사항을 추적하는 방법을 포함하여 Android 오픈소스 프로젝트 (AOSP)에 코드 변경사항을 제출하는 전체 프로세스를 설명합니다.

AOSP는 Git을 사용하는 프로젝트를 위한 웹 기반 코드 검토 시스템인 Gerrit을 사용합니다.

기여자 라이선스 계약 서명

AOSP에 코드 변경사항을 기여하기 전에 참여자 라이선스 계약 및 헤더를 읽고 다음 계약 중 하나에 서명해야 합니다.

브랜치 시작

변경하려는 각 코드에 대해 다음 단계를 수행합니다.

  1. 관련 Git 저장소 내에서 새 브랜치를 시작합니다. 브랜치는 원본 파일의 사본이 아닙니다. 로컬 브랜치를 만들고 가벼운 작업으로 전환하는 특정 커밋을 가리키는 포인터입니다. 브랜치를 사용하면 서로 다른 변경사항을 식별할 수 있습니다. 브랜치를 시작하려면 다음 명령어를 실행합니다.

    repo start BRANCH_NAME

    같은 저장소에서 동시에 여러 독립 브랜치를 시작할 수 있습니다. 브랜치 BRANCH_NAME은 작업공간 기준에서 로컬이며, Gerrit 또는 최종 소스 트리에 포함되지 않습니다. 브랜치는 현재 있는 프로젝트에 따라 다르므로 동일한 변경의 일환으로 여러 프로젝트의 파일을 변경해야 하는 경우 파일을 변경하는 각 프로젝트에 브랜치가 필요합니다.

  2. (선택사항) 브랜치가 생성되었는지 확인합니다.

    repo status .

    새로 만든 브랜치가 표시됩니다. 예를 들면 다음과 같습니다.

    project frameworks/native/                      branch mynewbranch

변경사항 적용 및 테스트

변경사항을 적용하고 테스트하려면 다음 단계를 따르세요.

  1. 최신 코드베이스로 작업하려면 전체 코드베이스를 동기화합니다.

    repo sync

    동기화 중에 충돌이 발생하면 동기화 충돌 해결의 2~4단계를 참고하세요.

  2. 변경할 코드를 찾습니다. 코드를 찾으려면 Android 코드 검색을 사용하는 것이 좋습니다. Android 코드 검색을 사용하여 실제로 사용할 때 배치되는 대로 AOSP 소스 코드를 볼 수 있습니다. 자세한 내용은 코드 검색 시작하기를 참고하세요. Android 코드 검색 내에서 main 브랜치의 모든 코드를 보려면 https://cs.android.com/android/platform/superproject/main로 이동합니다.

  3. 소스 파일을 수정하거나 추가합니다. 변경사항이 있는 경우:

  4. Android 빌드

  5. 빌드를 테스트합니다.

변경사항 스테이징 및 커밋

커밋은 Git의 버전 관리의 기본 단위이며 디렉터리 구조의 스냅샷과 전체 프로젝트의 파일 콘텐츠로 구성됩니다. 변경사항을 커밋하려면 다음 단계를 따르세요.

  1. 기본적으로 Git은 변경사항을 등록하지만 추적하지 않습니다. Git이 변경사항을 추적하도록 지시하려면 커밋에 포함할 변경사항을 표시하거나 스테이징해야 합니다. 다음 명령어를 실행하여 변경사항을 스테이징합니다.

    git add -A

    이 명령어는 파일에 적용된 변경사항을 추적합니다.

  2. 스테이징 영역의 파일을 가져와 로컬 데이터베이스에 커밋하거나 저장합니다.

    git commit -s

    기본적으로 텍스트 편집기가 열리고 커밋 메시지를 입력하라는 메시지가 표시됩니다.

  3. 다음 형식으로 커밋 메시지를 입력합니다.

    • 1행: 광고 제목입니다. 변경사항을 한 줄로 요약합니다 (최대 50자). 변경한 영역을 설명하는 데 접두사를 사용한 후 이 커밋에서 변경한 내용에 관해 설명해 보세요. 사용자 인터페이스 변경이 포함된 다음 예를 참고하세요.

      ui: Removes deprecated widget
      
    • 2행: 빈 줄입니다. 제목 뒤에 빈 줄을 넣습니다.

    • 3행: 본문 최대 72자에서 강제 줄바꿈되는 긴 내용 입력란을 입력합니다. 변경사항으로 어떤 문제를 어떻게 해결하는지 설명합니다. 본문은 선택사항이지만 변경사항을 다시 참고해야 하는 다른 사용자에게는 유용합니다. 다른 기여자가 이 기능으로 작업할 때 중요할 수 있는 모든 가정에 관한 간단한 참고사항이나 배경 정보를 포함해야 합니다.

    좋은 커밋 설명 (예 포함)에 관한 블로그를 읽으려면 Git 커밋 메시지 작성 방법을 참고하세요.

  4. 커밋을 저장합니다.

repo init 도중에 제공된 고유 변경 ID와 이름 및 이메일은 자동으로 커밋 메시지에 추가됩니다.

검토를 위해 변경사항 업로드

변경사항을 개인 Git 기록에 커밋한 후에는 다음과 같이 Gerrit에 업로드합니다.

  1. 다음 명령어를 실행하여 모든 프로젝트의 모든 커밋을 업로드합니다.

    repo upload

    모든 프로젝트의 모든 변경사항이 업로드에 포함됩니다.

    후크 스크립트를 실행하라는 메시지가 표시됩니다.

  2. a 다음에 Enter 키를 누릅니다.

    업로드를 승인하라는 메시지가 표시됩니다.

    Upload project frameworks/native/ to remote branch main:
    branch BRANCH_NAME ( 1 commit, Wed Aug 7 09:32:33 2019 -0700):
           ff46b36d android codelab change
    to https://android-review.googlesource.com/ (y/N)?
    
  3. y 키를 누른 다음 Enter 키를 눌러 업로드를 승인합니다.

remote: SUCCESS와 유사한 메시지가 표시됩니다.

검토 요청

업로드에 성공하면 Repo는 Gerrit의 변경사항 링크를 제공합니다. 링크를 클릭하여 검토 서버에서 변경사항을 확인하거나 의견을 추가하거나 변경사항에 대해 특정 검토자를 요청합니다. 코드의 모든 변경사항은 적절한 코드 소유자가 검토해야 합니다.

검토 요청 방법:

  1. Gerrit에서 소유자 추천을 클릭합니다.

    Gerrit의 소유자 추천 링크

    그림 1. Gerrit에서 소유자 추천 링크를 사용합니다.

    검토자 대화상자가 표시됩니다. 이 대화상자에는 변경사항을 검토할 수 있는 코드 소유자의 목록이 포함되어 있습니다.

  2. 코드 소유자를 클릭하여 검토에 추가합니다.

    보내기 버튼이 활성화됩니다.

  3. (선택사항) 변경사항을 검토할 다른 사용자의 이메일 주소를 입력합니다.

  4. (선택사항) 자동 제출 옆에 있는 +1을 클릭하여 승인을 받은 후 변경사항을 자동으로 제출합니다. 이 버튼을 클릭하지 않으면 Google 직원이 변경사항을 대신 제출해야 합니다.

  5. 전송을 클릭하여 검토를 위해 변경사항을 전송합니다.

코드 소유자는 코드 변경사항을 검토하고 변경사항을 해결하거나 승인할 수 있는 의견을 제공합니다.

변경 상태 확인

변경사항에 있는 파일의 상태를 확인하려면 변경사항의 파일 옆에 있는 다음 아이콘을 확인하세요.

  • (체크표시 아이콘): 코드 소유자가 승인함
  • (X 표시 아이콘): 코드 소유자가 승인하지 않음
  • (시계 아이콘): 코드 소유자의 승인 대기 중

다음 그림은 변경사항의 파일에 적용된 이러한 상태 아이콘을 보여줍니다.

코드 소유자의 승인을 나타내는 아이콘이 있는 파일의 예

그림 2. 코드 소유자의 승인을 나타내는 아이콘이 있는 파일의 예

의견 해결 및 대체 변경사항 업로드

검토자가 업데이트 수정을 요청하는 경우 Git 내에서 커밋을 수정할 수 있으며, 이렇게 하면 동일한 변경사항에 새 패치 세트가 생성됩니다.

의견을 해결하고 변경사항을 수정하려면 다음 단계를 따르세요.

  1. 변경사항 적용 및 테스트하기의 2~4단계를 따르세요.

  2. 다음 명령어를 실행하여 변경사항을 수정합니다.

    git add -A
    git commit --amend
  3. 변경사항을 업로드합니다.

수정된 변경사항을 업로드하면 이 변경사항이 Gerrit 및 로컬 Git 기록의 원본을 대체합니다.

동기화 충돌 해결

본인의 것과 충돌하는 다른 변경사항이 소스 트리에 제출되면 충돌이 있다는 메시지가 표시됩니다. 충돌을 해결하려면 다음 단계를 따르세요.

  1. 최신 코드를 사용하고 있는지 확인합니다.

    repo sync .

    repo sync 명령어는 먼저 소스 서버에서 업데이트를 가져온 다음 HEAD를 새로운 원격 HEAD에 자동으로 리베이스하려고 합니다.

  2. 자동 리베이스에 실패하면 수동으로 리베이스를 실행합니다.

    repo rebase .
  3. 병합 충돌을 해결합니다. 병합 충돌을 해결하는 선호하는 방법이 없는 경우 git mergetool를 사용하여 파일 간의 충돌을 수동으로 수정할 수 있습니다.

  4. 충돌하는 파일을 수정한 후에는 다음 명령어를 실행하여 새 커밋을 적용합니다.

    git rebase --continue

변경사항 제출

제출한 내용이 검토 및 인증 절차를 거치고 나면 Google 검토자가 코드를 제출해야 합니다. 다른 사용자는 repo sync를 실행하여 업데이트를 각 로컬 클라이언트로 가져올 수 있습니다.

제출 항목이 병합된 후 Android 연속 통합 대시보드를 방문하여 제출 항목이 트리에 통합되는 시점을 모니터링할 수 있습니다.