1. 시작하기: 프로젝트 클론
지난 강의에서 멈춘 부분부터 시작합시다. GitHub에 리포지토리를 만들었고, 이제 작업을 시작하려면 로컬 컴퓨터에 복사본을 받아와야 합니다. 이 과정을 클론(clone)이라고 합니다.
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이 무시해야 할 파일과 폴더 이름 패턴을 적습니다.
빈 줄은 무시됩니다. 주석을 쓰려면 줄 앞에 #를 붙이세요.
패턴:
*— 임의의 수의 어떤 문자든 대체합니다. 예:*.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