1. 시작하기: 프로젝트 클론(복제)
지난 강의에서 멈췄던 지점부터 시작해 봅시다. 여러분은 GitHub에 생성한 저장소가 있고, 이제 작업을 시작하기 위해 그 저장소의 로컬 복사본을 컴퓨터에 받아와야 합니다. 이 과정을 클론(복제)이라고 합니다.
1단계. IDE를 실행하세요. 이미 어떤 프로젝트가 열려 있다면 File -> Close Project로 닫습니다. 시작 화면에서 Clone Repository 또는 Get from VCS를 선택하세요.
2단계. 열린 창에 저장소의 URL을 붙여넣습니다. 이 방식은 다른 사람의 저장소를 클론할 때 유용합니다. URL은 GitHub의 저장소 페이지에서 복사할 수 있습니다.
자신의 저장소를 클론하는 경우(우리의 시나리오)에는 IDE에서 바로 GitHub 계정에 로그인하는 것이 가장 쉽습니다. 이를 위해 Log in to GitHub 옵션을 선택하세요. IDE가 인증을 위해 브라우저를 엽니다.
열린 페이지에서 초록색 버튼 Authorize JetBrains를 과감히 클릭하세요. 이후 IDE 내 목록에서 자신의 저장소를 바로 선택할 수 있습니다. 원하는 프로젝트를 선택하고 Clone을 누르세요.
3단계. IDE가 이 프로젝트를 신뢰하는지 묻습니다. 자신의 저장소이므로 Trust Project를 클릭하세요.
4단계. 백신 설정(Windows 사용자용)
Windows 백신이 IDE가 자신에게 알려지지 않은 작업을 수행하려 한다고 경고할 수 있습니다. 우리는 프로그램을 만들고 실행할 것이므로 IDE가 제한 없이 동작하도록 허용해야 합니다. IDE가 백신 예외에 필요한 폴더를 자동으로 추가하도록 “Automatically” 버튼을 누르세요.
2. 변경 사항 저장: Commit
commit — 프로젝트의 특정 시점에서의 상태를 저장한 “스냅샷”입니다. 게임의 저장 지점처럼 생각하세요: 무언가 잘못되더라도 언제든지 그 지점으로 돌아갈 수 있습니다. 각 커밋에는 고유한 식별자와, 수행한 변경을 설명하는 메시지가 있습니다.
gitGraph
commit id: "Initial commit"
commit id: "Add user authentication"
commit id: "Fix login button bug"
commit id: "Refactor database connection"
커밋 히스토리. 각 새 커밋은 이전 커밋을 기반으로 생성되어 프로젝트의 발전 연대기를 만듭니다.
1단계. 변경을 가합니다.
새로 생성한 저장소를 클론했다면 파일은 하나 — README.md만 있을 것입니다.
README.md 파일을 열어 프로젝트 설명을 추가하세요. 파일을 편집하기 시작하면 IDE가 프로젝트 패널에서 해당 파일 이름을 파란색으로 하이라이트합니다. 이는 파일이 변경되었지만 아직 Git에 저장되지 않았음을 의미합니다. 변경한 위치에는 IDE가 초록색 선을 추가합니다.
2단계. Commit 창을 엽니다.
IDE 왼쪽에 Commit 탭이 있습니다. 이 탭을 열면 저장 준비가 된 모든 변경을 확인할 수 있습니다. 첫 번째 커밋에서는 이 창을 특히 주의 깊게 살펴보세요.
무엇이 보이는지 살펴봅시다:
- Changes: 이미 Git에서 추적 중인 파일이 변경된 경우 이곳에 표시됩니다. 우리의 경우 프로젝트 계획을 추가한
README.md가 여기에 나타납니다. - Unversioned Files: Git이 프로젝트 폴더에서 발견했지만 아직 추적하지 않는 새 파일입니다.
질문이 생길 수 있습니다: 이런 여러 보조 파일까지 모두 저장소에 추가해야 할까요?
좋은 소식은, GitHub에서 저장소를 만들 때 .gitignore 템플릿을 선택했다는 점입니다. 이 파일에는 이미 불필요한 폴더나 파일을 Git이 무시하도록 하는 규칙이 들어 있습니다. 이에 대해서는 강의 마지막에 더 자세히 다루겠습니다.
당장은 첫 번째 커밋의 목표 — 프로젝트의 핵심 파일들을 히스토리에 추가하고 커밋 메시지를 작성하는 것입니다.
3단계. 커밋을 수행합니다.
Commit 버튼을 클릭하세요. 완료! 로컬 저장소에 프로젝트의 “스냅샷”을 저장했습니다. 파일 색상은 다시 일반 상태로 돌아갑니다.
3. 변경 사항을 GitHub로 보내기: Push
여러분의 커밋은 아직 컴퓨터에만 저장되어 있습니다. 팀과 공유하거나 안전한 곳에 보관하려면 원격 GitHub 저장소로 전송해야 합니다.
sequenceDiagram
participant 로컬 저장소 (내 컴퓨터)
participant 원격 저장소 (GitHub)
note over 로컬 저장소 (내 컴퓨터): 커밋을 하나 이상 만들었습니다.
지금은 여기만 존재합니다.
로컬 저장소 (내 컴퓨터) ->> 원격 저장소 (GitHub): git push (커밋 전송)
note over 원격 저장소 (GitHub): 커밋이 복사되어
서버에 안전하게 보관됩니다.
1단계. Push 버튼을 누릅니다.
IDE 오른쪽 상단에 위쪽을 가리키는 초록색 화살표가 있습니다 — Push 버튼입니다. 클릭하세요.
2단계. 확인하고 승인합니다.
전송 준비가 된 모든 커밋이 표시되는 창이 열립니다. 보내려는 내용이 맞는지 확인할 수 있는 마지막 기회입니다. Push를 클릭하세요.
모든 과정이 성공적으로 완료되면 다음 메시지가 표시됩니다: Pushed commits to origin/main. Create pull request
3단계. GitHub에서 결과를 확인합니다.
성공적으로 전송한 후 GitHub의 저장소 페이지를 열어 보세요. 변경 사항이 반영된 것을 확인할 수 있습니다.
4. Git 제어 패널
IDE에는 상단 메뉴에 Git이라는 전용 메뉴가 있습니다. 버전 관리를 위한 컨트롤 센터라고 생각하면 됩니다. 주요 항목을 간단히 살펴봅시다.
Commit: 변경 사항을 저장하는 익숙한 창을 엽니다.Push: 커밋을 GitHub로 전송하는 창을 엽니다.Update Project: 매우 중요한 기능입니다. 팀의 다른 구성원이 올린 최신 변경을 내려받습니다(git pull수행). 매일 아침 작업을 시작하기 전에 눌러 주세요!Branches: 브랜치를 관리하는 창을 엽니다. 이 부분은 다음 강의에서 자세히 다룹니다.Show Git Log: 프로젝트의 모든 커밋 히스토리를 보여줍니다. 나만의 타임머신입니다.
5. .gitignore 파일 사용
프로젝트에 어떤 보조 파일을 추가했는데 그것들이 실수로 저장소에 올라가지 않게 하고 싶다면 예외 목록에 추가할 수 있습니다. 이를 위해 .gitignore라는 파일이 있습니다. 임시 파일, 로그, 비밀번호 등 버전 관리 시스템에 보관할 필요가 없는 파일이 있을 때 매우 유용합니다.
1단계. 먼저 무시하려는 파일을 프로젝트 디렉터리에 생성하세요. 예: notes.txt. 파일을 만든 뒤 IDE가 Git에 추가하겠냐고 묻는다면 Cancel을 누르세요.
2단계. “Project” 창에서 만든 파일을 마우스 오른쪽 버튼으로 클릭합니다. Git --> Add to .gitignore --> Add to .gitignore로 이동하세요. 이 옵션은 선택한 파일을 프로젝트 루트의 .gitignore에 추가합니다.
아직 .gitignore 파일이 없다면 IDE가 생성하겠냐고 제안합니다. 동의하세요.
3단계. IDE가 자동으로 .gitignore에 파일 이름을 추가합니다.
.gitignore에 추가한 후 무시되는 파일은 회색 또는 갈색으로 표시됩니다. 변경 사항을 커밋하려 할 때 이 파일들은 무시됩니다. .idea 폴더를 무시 목록에 추가해도 됩니다.
프로젝트의 모든 구성원이 동일한 무시 규칙을 사용하도록, .gitignore 파일 자체를 커밋하고 GitHub로 전송하는 것을 잊지 마세요.
로컬 파일 제외: .git/info/exclude
모든 사용자에게 적용되는 .gitignore 파일 외에도, Git은 .git/info/exclude 파일에 로컬 무시 규칙을 만들 수 있는 기능을 제공합니다. 이 규칙은 저장소에 커밋되지 않으며 여러분의 로컬 복사본에만 적용됩니다.
예를 들어 IDE가 생성하지만 여러분에게만 특화되어 있고 버전 관리에는 들어가면 안 되는 파일을 무시할 때 유용합니다.
중요! 로컬 무시 규칙은 여러분의 로컬 저장소 복사본에만 적용됩니다.
이미 커밋했다면?
.gitignore는 새로 생성되어 아직 추적되지 않는 파일만 무시합니다. 이미 파일을 커밋했다면 그 파일은 저장소 히스토리에 있으며, .gitignore에 추가하더라도 Git은 계속 추적합니다. 이런 상황을 위한 터미널 명령이 있습니다: git rm --cached <file>. 다만 이 명령에 대해서는 별도로 더 읽어볼 필요가 있습니다.
.gitignore 규칙
.gitignore 파일에는 Git이 무시해야 할 파일 및 폴더 이름의 패턴을 지정합니다.
빈 줄은 무시됩니다. 주석을 추가하려면 줄을 # 문자로 시작하세요.
패턴:
*— 임의의 문자 0개 이상과 일치합니다. 예:*.log는 확장자가.log인 모든 파일을 무시합니다./— 패턴 끝에 위치하면 디렉터리를 의미합니다. 예:logs/는logs폴더의 모든 내용을 무시합니다.!— 줄 시작에 있으면 규칙을 반전합니다. 예를 들어*.log규칙이 있지만important.log는 추적하고 싶다면!important.log줄을 추가하세요.**— 임의 깊이의 하위 폴더와 일치합니다. 예:**/temp는 어떤 깊이에 있든temp폴더를 무시합니다.
.gitignore 파일 예시
# 컴파일된 코드
/bin/
/obj/
# 임시 파일
*.tmp
*.swp
# 로그
*.log
# IDE가 생성하는 폴더
.idea/
*.user
*.suo
# 가상 환경과 의존성
/venv/
/node_modules/
미리 준비된 템플릿
이 파일을 처음부터 직접 작성할 필요는 없습니다. 커뮤니티가 검증한 템플릿이 이미 존재합니다:
- 여러 언어와 프레임워크용 GitHub의
.gitignore모음: https://github.com/github/gitignore. - gitignore.io — 사용 중인 기술 스택에 맞는
.gitignore파일을 생성해 주는 편리한 웹 서비스.
GO TO FULL VERSION