

 AWS Cloud9 는 더 이상 신규 고객이 사용할 수 없습니다. AWS Cloud9 의 기존 고객은 정상적으로 서비스를 계속 이용할 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/devops/how-to-migrate-from-aws-cloud9-to-aws-ide-toolkits-or-aws-cloudshell/)

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Git 패널로 소스 제어 관리
<a name="using-gitpanel"></a>

용 Git 패널 확장은 코어 및 고급 Git 명령 모두에 대한 편리한 사용자 인터페이스 액세스를 AWS Cloud9 제공합니다.

이 섹션에서는 소스 제어를 관리하기 위한 주요 Git 기능에 액세스하는 방법을 보여 줍니다. 이 절차에서는 **Git 패널** 메뉴를 사용하여 리포지토리와 그 콘텐츠에 대해 Git 명령을 실행하는 데 중점을 둡니다.

![\[Git 리포지토리를 초기화하고 복제하기 위한 인터페이스 옵션\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-panel-menu.png)


 Git 패널 검색 상자에 이름을 입력하기 시작하여 지원되는 모든 Git 명령에 액세스 할 수도 있습니다.

![\[Git 리포지토리를 초기화하고 복제하기 위한 인터페이스 옵션\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-commands-type.png)


또한 Git 패널 인터페이스와 상호 작용할 때 실행되는 실제 Git 명령을 볼 수 있습니다. 명령줄 작업을 보려면 **Git 패널** 메뉴로 이동하여 [**Git 출력 표시(Show Git Output)**]를 선택합니다.

![\[Git 명령 출력 보기\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-output.png)


## Git 리포지토리 초기화 또는 복제
<a name="init-clone-repo"></a>

Git 리포지토리(‘repo’)는 처음부터 프로젝트의 전체 기록을 포함합니다. 리포지토리는 스테이징된 파일을 repo로 커밋할 때마다 캡처된 프로젝트 콘텐츠의 모든 스냅샷으로 구성됩니다.

Git 패널은 Git 리포지토리를 얻는 두 가지 방법을 지원합니다.
+ 기존 디렉터리를 Git 리포지토리로 초기화합니다.
+ 기존 리포지토리를 복제하고 로컬 디렉터리에 복사합니다.

![\[Git 리포지토리를 초기화하고 복제하기 위한 인터페이스 옵션\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/init-clone.png)


**참고**  
리포지토리를 초기화하거나 복제하기 위한 인터페이스 옵션은 환경의 WorkSpace 폴더에 Git 리포지토리가 아직 추가되지 않은 경우에만 사용할 수 있습니다. 리포지토리에 대한 작업 디렉터리가 이미 있는 경우 Git 패널 창에 작업 디렉터리 및 준비 영역의 상태가 표시됩니다. **Git 패널** 메뉴를 사용하여 리포지토리에 대해 실행할 수 있는 Git 명령에 액세스할 수도 있습니다.<a name="initialize-repo-proc"></a>

## 리포지토리를 초기화거나 복제하려면
<a name="initialize-repo-proc"></a>

1. Git 패널을 아직 사용할 수 없는 경우 [**Window**], [**소스 제어(Source Control)**]를 선택한 다음 Git 아이콘을 선택하여 액세스합니다.
**참고**  
**Ctrl\$1Shift\$1G**라는 키보드 바로 가기를 사용하여 Git 패널을 열 수도 있습니다.

1. 새 리포지토리를 초기화할지 아니면 기존 리포지토리를 복제할지를 선택합니다.

------
#### [ Initialize a repository ]
   + Git 패널에서 [**리포지토리 초기화(Initialize Repository)**]를 선택합니다.
   + 그런 다음 Git 리포지토리가 초기화될 WorkSpace 폴더를 선택합니다. 폴더 경로를 입력하거나, 경로를 선택하거나, 대화 상자에서 폴더를 선택할 수 있습니다.
   + 대화 상자를 사용하는 경우 대상 폴더를 선택하고 [**리포지토리 초기화(Initialize Repository)**]를 선택합니다.

![\[Git 리포지토리의 WorkSpace 폴더 선택\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/init-dialog-box.png)


   선택한 폴더에서 Git 리포지토리를 초기화하고 나면, Git 패널에 해당 폴더에 있는 모든 파일이 추적되지 않는 상태이며 Git 준비 영역에 추가할 준비가 된 상태로 표시됩니다.

![\[Git 리포지토리의 WorkSpace 폴더 선택\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/untracked-changes.png)


------
#### [ Clone a repository ]
   + Git 패널 창에서 [**리포지토리 복제(Clone Repository)**]를 선택합니다.
   + 다음으로 복제할 원격 리포지토리의 URL을 입력하고(예: GitHub에서 호스팅되는 리포지토리를 복제하려면 `https://github.com/my-own-repo/my-repo-project-name.git` 입력) **Return** 키를 누릅니다.
   + 표시되는 대화 상자에서, 복제된 리포지토리의 WorkSpace 폴더를 선택하고 [**리포지토리 위치 선택(Select Repository Location)**]을 선택합니다.

**참고**  
외부 사이트(예: GitHub)에서 호스팅되는 리포지토리에 액세스하는 경우 프로세스를 완료하려면 해당 사이트의 로그인 보안 인증 정보도 입력해야 합니다.

   선택한 폴더에서 원격 리포지토리를 복제한 후에는 `git pull` 명령을 실행하여 로컬 리포지토리를 원격 리포지토리의 최신 변경 사항과 동기화할 수 있습니다. 자세한 내용은 [원격 리포지토리 작업](#working-with-remote-repos) 단원을 참조하십시오.

------

## 파일 스테이징 및 커밋
<a name="staging-and-commit"></a>

Git 리포지토리를 얻은 후에는 다음 두 단계 프로세스를 사용하여 콘텐츠로 채울 수 있습니다.

1. 추적되지 않거나 최근에 수정한 콘텐츠를 준비 영역에 추가합니다.

1. 준비 영역의 파일을 작업 디렉터리에 커밋합니다.

**중요**  
작업 디렉터리의 모든 파일을 리포지토리에 커밋하지는 않으려는 경우도 있습니다. 예를 들어 런타임 중에 생성된 파일을 프로젝트의 리포지토리에 추가해서는 안 될 것입니다. Git 패널을 사용하면 파일을 `.gitignore` 파일의 목록에 추가하여 무시하도록 수 표시할 수 있습니다.  
`.gitignore`의 목록을 업데이트하려면 준비 영역에 추가되지 않은 파일을 마우스 오른쪽 버튼으로 클릭하고 [**.gitignore에 파일 추가(Add File to .gitignore)**]를 선택합니다. IDE가 `.gitignore` 파일을 열고 선택한 파일의 이름이 무시된 파일 목록에 추가됩니다.  
`.gitignore`에서 패턴 매칭을 사용하여 파일 형식을 제외하는 방법에 대한 자세한 내용은 관련 [git-scm.com 사이트를 참조](https://git-scm.com/docs/gitignore)하세요.

------
#### [ Stage files ]

준비 영역에 추가되지 않는 파일(레이블이 ‘U’인 파일)과 수정된 파일(레이블이 ‘M’인 파일)은 Git 패널 창의 **Changes**(변경 사항) 아래에 나열됩니다.

![\[git 리포지토리의 WorkSpace 폴더에 있는 추적되지 않는 콘텐츠\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-unstaged.png)


Git 패널 인터페이스를 사용하여 특정 파일 또는 추적되지 않고 수정된 모든 파일을 준비 영역에 추가할 수 있습니다.
+ 특정 파일: 파일을 일시 중지한 다음 **\$1**를 선택하여 준비 영역에 추가합니다. 또는 파일을 마우스 오른쪽 버튼으로 클릭하고 [**변경 사항 스테이징(Stage Changes)**]을 선택합니다.
+ 모든 파일: **Git 패널** 메뉴를 클릭하고 [**모든 변경 사항 스테이징(Stage All Changes)**]을 선택합니다.

리포지토리의 인덱스에 추가된 파일은 [**스테이징된 변경 사항(Staged Changes)**]에 나열됩니다. 이전에 추적되지 않은 파일에는 ‘A’라는 레이블이 표시되어 스테이징되었음을 나타냅니다.

![\[git 리포지토리의 WorkSpace 폴더에 있는 스테이징된 콘텐츠\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/staged-changes.png)


**참고**  
특정 변경 사항 또는 모든 변경 사항을 언스테이징할 수도 있습니다. 단일 파일의 경우 파일을 일시 중지한 다음 **-**를 선택합니다. 또는 파일을 마우스 오른쪽 버튼으로 클릭하고 [**변경 사항 언스테이징(Unstage Changes)**]을 선택합니다. 모든 변경 내용을 언스테이징하려면 **Git 패널** 메뉴로 이동하여 [**모든 변경 사항 언스테이징(Unstage All Changes)**]을 선택합니다.

------
#### [ Commit files ]

Git의 `commit` 명령을 사용하여 스테이징된 파일을 리포지토리의 영구 스냅샷으로 캡처할 수 있습니다. Git 패널 인터페이스를 사용하여 커밋할 파일을 선택할 수 있습니다.
+ 준비 영역의 파일 커밋: **Git 패널** 메뉴로 이동하여 [**커밋(Commit)**] 또는 [**스테이징된 항목 커밋(Commit Staged)**]을 선택합니다.
+ 작업 디렉터리의 파일 모두 커밋: **Git 패널** 메뉴로 이동하여 [**모두 커밋(Commit All)**]을 선택합니다. (이 옵션은 `git commit`을 호출하기 전에 `git add`를 사용하여 준비 영역에 파일을 추가합니다.) 

**참고**  
또한 Git 패널을 사용하여 파일을 커밋할 때 `amend` 및 `signed-off` 옵션을 사용할 수 있습니다. `amend` 옵션은 가장 최근 커밋의 커밋 메시지를 수정합니다. `sign-off` 옵션은 Git 로그에서 커밋을 수행한 사용자를 식별할 수 있습니다.  
**Git 패널** 메뉴로 이동하고 [**마지막 커밋 실행 취소(Undo Last Commit)**]를 선택하여 커밋을 되돌릴 수도 있습니다.

------

## 다른 파일 버전 보기
<a name="comparing-changes"></a>

스테이징되거나 커밋된 후에 수정된 파일의 버전을 비교할 수 있습니다.
+ [**변경 사항(Changes)**]에 나열된 파일: 작업 디렉터리에 있는 버전과 마지막으로 스테이징되었거나 리포지토리에 커밋된 버전 간의 차이점을 보려면 ‘M’을 선택합니다.
+ [**스테이징된 변경 사항(Staged Changes)**]에 나열된 파일: 준비 영역에 있는 버전과 마지막으로 리포지토리에 커밋된 버전 간의 차이점을 보려면 ‘M’을 선택합니다.

‘M’을 선택하면 IDE 창에 두 버전의 파일 간의 차이점이 표시됩니다. 한쪽은 리포지토리에서 현재 버전으로 추적되는 버전을 보여줍니다. 다른 쪽은 아직 커밋되지 않은 수정된 버전을 보여줍니다.

![\[git 리포지토리에서 버전이 지정된 콘텐츠 비교\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-diff.png)


## 브랜치 작업
<a name="working-with-branches"></a>

Git는 리포지토리의 주요 브랜치와 독립적인 브랜치의 새로운 기능을 사용할 수 있도록 함으로써 워크플로 관리를 훨씬 용이하게 합니다. 여러 브랜치 간에 원활하게 전환하면서 기본 브랜치에 언제든 빌드할 소스 코드가 준비되어 있도록 합니다.<a name="create-branch-proc"></a>

## 브랜치 생성
<a name="create-branch-proc"></a>

브랜치를 생성하려면 브랜치의 이름을 지정하고 시작점을 선택해야 합니다.

1. **Git 패널** 메뉴에서 [**다음으로 체크아웃(Checkout to)**]을 선택합니다. 또는 Git 패널의 하단에 표시되는 현재 브랜치의 이름을 선택할 수 있습니다.  
![\[현재 Git 브랜치 선택하기\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-current-branch.png)

1. 새 브랜치를 생성하는 옵션을 선택합니다.
   + **새 브랜치 생성**: 현재 브랜치의 마지막 커밋에서 새 브랜치가 시작됩니다.
   + **다음에서 새 브랜치 생성**: 다음 화면에서 선택하는 브랜치의 마지막 커밋에서 새 브랜치가 시작됩니다.

1. 새 브랜치의 이름을 입력합니다.

1. 특정 브랜치를 브랜치의 시작점으로 지정하는 경우 목록에서 하나를 선택합니다.

새 브랜치로 전환한 후 Git 패널의 하단에서 현재 브랜치의 이름을 확인할 수 있습니다.

**참고**  
원격 리포지토리로 작업하는 경우 업스트림 원격 리포지토리에 [새 브랜치를 게시](#publish-branch-proc)하여 다른 사용자가 콘텐츠에 액세스할 수 있도록 합니다.<a name="switch-branches-proc"></a>

## 브랜치 전환
<a name="switch-branches-proc"></a>

Git을 사용하여 소스 제어를 관리하는 데 따른 주요 이점 중 하나는 브랜치를 전환하여 여러 프로젝트 간을 간단히 이동할 수 있다는 것입니다.
**중요**  
현재 브랜치에 리포지토리에 커밋되지 않은 파일이 있는 경우 브랜치를 전환할 수 없습니다. 먼저 작업 내용을 [커밋](#staging-and-commit) 또는 [stash](#stashing-work)하여 작업 디렉터리를 정리해야합니다.

1. Git 패널 하단에서 현재 브랜치의 이름을 선택합니다. 또는 **Git 패널**로 이동하여 [**다음으로 체크아웃(Checkout to)**]을 선택합니다.

1. 표시된 목록에서 브랜치를 선택합니다.

전환하고 나면, 리포지토리의 작업 디렉터리가 선택한 브랜치에 가장 최근에 커밋된 파일 버전으로 업데이트됩니다.<a name="merge-branch-proc"></a>

## 브랜치 병합
<a name="merge-branch-proc"></a>

개별 브랜치의 기능 작업을 마친 후에는 일반적으로 변경 내용을 주 프로젝트에 통합해야 합니다. Git를 사용하면 특정 브랜치(예: 기능 브랜치)를 다른 브랜치(일반적으로 리포지토리의 주 또는 기본 브랜치)로 병합하여 이러한 종류의 통합을 쉽게 수행할 수 있습니다.

1. 다른 브랜치를 병합할 브랜치를 선택하려면 **Git 패널** 메뉴로 이동한 후 [**다음으로 체크아웃(Checkout to)**]을 선택합니다.

   또는 Git 패널의 하단ㄴ에서 현재 브랜치의 이름을 선택하합니다.

1. 표시된 목록에서 전환할 브랜치를 선택합니다.

1. [**검색(Search)**] 상자에 ‘merge’라는 단어를 입력하기 시작합니다.

   [**명령(Commands)**] 목록에 **Git: Merge Branch**가 표시되면 해당 명령을 선택합니다.  
![\[병합 명령 찾기\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-merge.png)

1. 표시된 목록에서 대상 브랜치로 병합할 브랜치를 선택합니다.

   병합이 충돌 없이 완료되면 Git 패널 인터페이스가 새로 고쳐져 병합된 변경 사항이 포함된 대상 브랜치가 표시됩니다.

[브랜치를 병합](#working-with-branches)하는 경우 동일한 콘텐츠에 대한 서로 호환되지 않는 변경 사항으로 인해 병합 충돌이 발생할 수 있습니다. 이 경우 병합을 커밋하기 전에 충돌을 해결해야 한다는 경고가 표시됩니다.

IDE의 코드 편집기 창을 사용하여 두 브랜치에서 충돌하는 콘텐츠를 식별한 다음 변경하여 차이를 해결할 수 있습니다.

![\[병합 충돌을 해결하기 위한 IDE 창\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/git-merge-conflicts.png)


## 원격 리포지토리 작업
<a name="working-with-remote-repos"></a>

인터넷이나 네트워크에서 호스팅되는 원격 리포지토리는 팀원이 로컬 리포지토리에 커밋한 변경 사항을 공유할 수 있도록 허용하여 협업을 용이하게 합니다. 데이터를 업로드하고 다운로드하는 Git 명령을 사용하면 ‘다운스트림’(로컬) 리포지토리의 콘텐츠가 ‘업스트림’(원격) 리포지토리의 콘텐츠와 동기화되도록 할 수 있습니다.<a name="publish-branch-proc"></a>

## 원격 리포지토리에 브랜치 게시
<a name="publish-branch-proc"></a>

로컬 리포지토리의 브랜치를 생성하고 나면, 해당 브랜치는 사용자에게 프라이빗이며 원격 리포지토리에 ‘업스트림’으로 푸시할 때까지 공동 작업자가 사용할 수 없습니다.

1. 현재 브랜치를 게시하려면 **Git 패널** 메뉴로 이동하여 [**브랜치 게시(Publish Branch)**]를 선택합니다. 또는 Git 패널 하단의 브랜치 이름 옆에 있는 클라우드 기호를 클릭합니다.  
![\[원격 리포지토리에 브랜치를 게시하는 옵션\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/publish-branch-image.png)

1. 필요하다면 원격 리포지토리에 액세스할 수 있는 로그인 보안 인증 정보를 입력합니다.

브랜치가 원격 리포지토리에 성공적으로 게시되면 Git 패널 하단의 브랜치 이름 옆에 동기화 기호가 표시됩니다. 로컬 및 원격 리포지토리의 컨텐츠를 동기화하려면 이 기호를 선택합니다.

![\[로컬 및 원격 브랜치 동기화 옵션\]](http://docs.aws.amazon.com/ko_kr/cloud9/latest/user-guide/images/sync-branch-local-remote.png)


### 로컬 리포지토리와 원격 리포지토리 간에 컨텐츠 푸시 및 풀
<a name="pushing-and-pulling"></a>

Git을 사용하여 공유 프로젝트에서 협업하는 경우 일반적으로 다른 팀원의 최근 변경 사항을 원격 리포지토리에서 로컬 리포지토리로 풀하는 방식으로 작업을 시작합니다. 그리고 로컬 리포지토리의 변경 사항을 커밋한 후에는 나머지 팀이 액세스할 수 있도록 원격 리포지토리로 푸시합니다. 이러한 작업은 `git pull` 및 `git push` 명령을 사용하여 수행합니다.

**참고**  
대부분의 호스트된 리포지토리(예: GitHub의 리포지토리)에서 변경 사항을 푸시하고 가져올 때 로그인 보안 인증 정보를 입력해야 합니다.

------
#### [ Pull changes from remote ]

Git 패널 인터페이스를 통해 `git pull` 명령을 사용하면 원격 리포지토리의 브랜치에 커밋된 최신 변경 사항으로 로컬 리포지토리를 업데이트할 수 있습니다.

1. **Git 패널** 메뉴에서 [**다음으로 체크아웃(Checkout to)**]을 선택합니다.

1. 브랜치 목록에서 변경 사항을 가져올 로컬 브랜치를 선택합니다.

1. 그런 다음 **Git 패널** 메뉴로 이동하여 [**다음에서 풀(Pull from)**]을 선택합니다.

1. 원격 리포지토리를 선택한 다음 해당 리포지토리의 브랜치를 선택하여 변경 사항을 가져옵니다.

풀 작업을 수행한 후에는 리포지토리 작업 디렉터리의 원격 리포지토리에서 검색한 파일에 액세스할 수 있습니다. 파일을 수정한 후 변경 사항을 원격 브랜치로 푸시할 수 있습니다.

------
#### [ Push changes to remote ]

Git 패널 인터페이스를 통해 `git push` 명령을 사용하면 로컬 리포지토리의 지정된 브랜치에 적용된 최신 변경 사항으로 원격 리포지토리를 업데이트할 수 있습니다.

1. **Git 패널** 메뉴에서 [**다음으로 체크아웃(Checkout to)**]을 선택합니다.

1. 브랜치 목록에서 변경 사항을 적용할 로컬 브랜치를 선택합니다.

1. 그런 다음 **Git 패널** 메뉴로 이동하여 [**다음으로 푸시(Push to)**]를 선택합니다.

1. 원격 리포지토리를 선택한 다음 해당 리포지토리의 브랜치를 선택하여 변경 사항을 푸시합니다.

푸시 작업을 수행하고 나면 다른 팀원이 해당 변경 사항을 리포지토리의 로컬 복사본으로 풀하여 액세스할 수 있습니다.

------

## 파일 stash 및 검색
<a name="stashing-work"></a>

Git의 stash 기능을 사용하면 먼저 스테이징 또는 수정된 파일을 커밋하지 않고도 브랜치를 전환할 수 있습니다. stash 기능은 작업 디렉터리 및 준비 영역의 현재 상태를 캡처하고 나중에 사용할 수 있도록 저장합니다. 이 기능은 아직 완성되지 않은 콘텐츠로 작업하고 지체없이 브랜치를 전환해야 할 때 유용합니다.<a name="stash-work-proc"></a>

**작업 stash**

1. 작업 디렉터리의 현재 상태를 숨기려면 **Git 패널** 메뉴로 이동하여 다음 옵션 중 하나를 선택합니다.
   + [**Stash**]: 작업 디렉터리의 수정되거나 스테이징된 파일이 모두 stash에 추가됩니다. 추적되지 않는 파일은 추가되지 않습니다.
   + [**Stash(추적되지 않는 항목 포함)(Stash (include Untracked))**]: 아직 추적되지 않는 파일을 포함하여 작업 디렉터리의 모든 파일이 stash에 추가됩니다.

1. 나중에 검색할 stash를 식별하는 데 도움이 될 선택적 메시지를 입력합니다.

stash하고 나면 Git 패널 인터페이스가 새로 고쳐져 정리된 작업 디렉터리가 표시됩니다.<a name="retrieve-work-proc"></a>

**stash 검색**

1. stash를 검색하여 작업 디렉터리에 적용하려면 **Git 패널** 메뉴로 이동하여 다음 옵션 중 하나를 선택합니다.
   + [**stash 적용(Apply Stash)**]: 선택한 stash를 작업 디렉터리에 적용하고 나중에 사용할 수 있도록 stash를 유지합니다.
   + [**Stage 팝(Pop Stash)**]: 선택한 stash를 작업 디렉터리에 적용하고 해당 stash를 stash 스택에서 삭제합니다.
**참고**  
stash 스택에 추가된 마지막 stash를 적용하거나 팝하도록 선택할 수도 있습니다.

1. 작업 디렉터리에 적용할 stash를 선택합니다.

Git 패널 인터페이스가 새로 고쳐져 stash가 적용된 작업 디렉터리가 표시됩니다.