# 프로젝트에 대한 코드 작성

분기, 포크, 커밋 및 끌어오기 요청을 사용하여 공동 작업 프로젝트에 대한 코드 변경 내용을 안전하게 작성, 구체화 및 제안할 수 있습니다.

프로젝트에 참여할 때 주 코드 베이스에 영향을 미치기 전에 코드를 작성하고 구체화할 수 있는 안전한 장소가 필요합니다. 분기, 포크, 커밋 및 끌어오기 요청은 함께 작동하여 해당 공간을 제공하므로 실험하고, 작업을 증분 방식으로 체크 인하고, 검토를 위해 완료된 변경 내용을 제안할 수 있습니다.

## 분기 및 포크를 사용하여 작업 격리

대부분의 작업은 자유롭게 변경할 수 있는 코드의 격리된 복사본을 만들어 시작합니다.

* 리포지토리에 대한 쓰기 권한이 있는 경우 **분기** 를 사용합니다. 분기를 사용하면 다른 분기에 영향을 주지 않고 리포지토리의 포함된 영역에서 기능을 개발하거나 버그를 수정하거나 실험할 수 있습니다. 기존 분기(일반적으로 기본 분기)에서 분기를 만듭니다.
* 쓰기 권한이 없거나 원래 프로젝트에서 완전히 독립하려는 경우 **포크** 를 사용합니다. 포크는 원래 "업스트림" 리포지토리와 코드 및 표시 유형 설정을 공유하는 별도의 리포지토리입니다. 자체 분기, 문제 및 끌어오기 요청이 있습니다. 포크를 사용하면 업스트림 리포지토리에 대한 끌어오기 요청을 열 수도 있습니다.

일반적으로 분기는 공유 리포지토리에서 이미 공동 작업할 때 가장 간단한 선택입니다. 포크는 업스트림 리포지토리에 대한 쓰기 액세스 권한이 없는 오픈 소스 기여에 가장 적합한 선택입니다.

## 커밋 작업 체크 인

코드를 작성할 때 작고 의미 있는 변경 내용 그룹을 **커밋**으로 저장합니다. 각 커밋은 변경된 내용을 설명하는 메시지와 함께 작업의 스냅샷을 기록하므로 기록을 더 쉽게 추적하고, 변경 내용을 검토하고, 코드가 어떻게 발전했는지 이해할 수 있습니다.

분기 또는 포크에서 자주 커밋하면 다음을 수행할 수 있습니다.

* 더 큰 변경 내용이 검토 가능한 단계로 나선다.
* 실험이 작동하지 않는 경우 이전 상태로 롤백합니다.
* 검토자에게 최종 변경에 어떻게 도착했는지에 대한 명확한 기록을 제공합니다.

## 끌어오기 요청을 사용하여 변경 제안

작업을 공유할 준비가 되면 **끌어오기 요청을** 열어 변경 내용을 기본 분기로 병합할 것을 제안합니다. 끌어오기 요청은 커밋, 변경에 대한 설명 및 도구 검토자가 병합하기 전에 토론하고 평가해야 합니다.

검토를 공식적으로 요청하지 않고 변경 내용을 공유하는 초안 끌어오기 요청을 만들어 작업이 진행 중인 동안 끌어오기 요청을 열 수 있습니다. 이는 조기 피드백을 원하거나 코드에 대해 자동화된 검사를 실행하려는 경우에 유용합니다.

## 코드를 최신 상태로 유지하고 최적화

끌어오기 요청이 열려 있는 동안 다른 사용자가 작업을 병합할 때 기본 분기가 계속 변경됩니다. 변경 내용을 정리하고 충돌을 줄이려면 다음을 수행할 수 있습니다.

* 기본 분기를 분기로 자주 병합하거나 다시 지정하므로 diff는 변경 내용에 계속 집중합니다.
  GitHub 는 기본적으로 분기와 분기가 밑이 다른 지점을 비교하는 3점 차이(diff)를 보여 줍니다.
* 검토를 요청하기 전에 복잡한 커밋 기록(커밋 순서 변경, 결합 또는 다시 단어 변경)을 정리하도록 다시 설정합니다.
* Git에서 경쟁 변경 내용을 자동으로 결합할 수 없는 경우 병합 충돌을 해결합니다.

## 리포지토리 컨트롤 내에서 작업

숙련된 기여자는 리포지토리가 정의하는 가드레일 내에서 작업합니다. 이러한 컨트롤은 푸시할 수 있는 위치, 작업을 승인해야 하는 사용자 및 병합하기 전에 전달해야 하는 항목을 셰이프합니다.

* **보호된 분기 및 규칙 집합은** 중요한 분기에 대한 직접 푸시를 차단하고, 선형 기록 또는 서명된 커밋을 요구하며, 병합하기 전에 상태 검사 또는 검토가 필요할 수 있습니다.
* **코드 소유자는** 변경 내용이 소유한 파일에 영향을 미칠 때 자동으로 검토를 요청하므로 중요한 영역에 대한 승인을 계획합니다.
* **푸시 규칙 집합은** 포크 네트워크에 적용되어 모든 포크의 파일 경로, 크기 또는 이름을 제한할 수 있습니다.
* **사전 수신 후크를** 사용하면 커밋이 GitHub Enterprise Server 수락되기 전에 관리자가 서버에서 정책 검사를 적용할 수 있습니다.

## 통합 도구 체인

끌어오기 요청은 코드를 빠르고 안전하게 작성하는 데 도움이 되는 자동화 및 서비스에 코드를 연결합니다.

* **Code scanning** 변경 **Dependabot** 내용이 끌어오기 요청을 통해 이동함에 따라 보안 문제와 취약한 종속성을 노출하므로 보안 코딩 사례를 조기에 적용할 수 있습니다.
* **GitHub Actions** 는 끌어오기 요청에 대한 모든 푸시에서 연속 통합을 실행하여 변경 내용을 자동으로 빌드하고 테스트할 수 있습니다.

## 추가 읽기

* [끌어오기 요청 만들기](/ko/enterprise-server@3.22/pull-requests/how-tos/create-pull-requests/creating-a-pull-request)