용어 | 설명 |
Repository | 프로젝트 파일과 폴더의 버전 관리를 위한 저장소. 로컬 또는 원격에 존재할 수 있음. |
Commit | 파일의 변경 사항을 저장하는 단위. 메시지와 함께 스냅샷 형태로 기록. |
Branch | 독립적으로 작업을 할 수 있는 가지. 여러 브랜치에서 병렬 작업이 가능. |
Master/Main | 기본 브랜치로, 보통 배포 가능한 안정된 버전의 코드가 저장됨. |
Merge | 두 브랜치의 변경 사항을 하나로 합치는 작업. |
Rebase | 한 브랜치의 변경 사항을 다른 브랜치의 변경 사항 앞에 재배치하는 작업. |
Checkout | 특정 브랜치나 커밋으로 이동하여 작업 디렉터리를 변경하는 명령어. |
Pull | 원격 저장소에서 로컬 저장소로 변경 사항을 가져오고 병합하는 작업. |
Push | 로컬 저장소에서 원격 저장소로 커밋을 전송하는 작업. |
Clone | 원격 저장소를 복사하여 로컬에 동일한 저장소를 생성하는 작업. |
Fetch | 원격 저장소에서 최신 변경 사항을 가져오지만 병합하지 않는 작업. |
Stash | 현재 작업 중인 변경 사항을 임시로 저장하여 작업 공간을 깨끗하게 만드는 기능. |
Conflict | 두 브랜치의 병합 중 충돌이 발생하는 경우, Git이 자동으로 해결할 수 없는 상태. |
HEAD | 현재 체크아웃된 브랜치나 커밋을 가리키는 포인터. |
Remote | 원격 저장소를 가리키는 이름. 보통 'origin'이 기본적으로 설정됨. |
Tag | 특정 커밋을 참조하는 마커. 주로 릴리즈 버전 등을 표기할 때 사용. |
Blame | 파일의 각 줄이 누구에 의해, 언제 변경되었는지 추적하는 명령어. |
Diff | 두 버전 간의 차이점을 보여주는 명령어. |
Log | 저장소의 커밋 기록을 보여주는 명령어. |
Fork | 원본 저장소를 복제하여 독립적인 개발을 할 수 있도록 만든 개인 저장소. |
Submodule | Git 저장소 안에 포함된 또 다른 Git 저장소. |
Cherry-pick | 특정 커밋의 변경 사항만 선택적으로 현재 브랜치에 적용하는 작업. |
Squash | 여러 커밋을 하나의 커밋으로 합치는 작업. |
Revert | 이전 커밋의 변경 사항을 무효화하고 되돌리는 작업. |
1. 로컬 저장소 (Local Repository)
- 설명: 로컬 저장소는 개발자가 자신의 컴퓨터(로컬 머신)에서 사용하는 Git 저장소입니다. 이 저장소는 컴퓨터에 직접 저장된 파일들과 버전 관리 데이터로 이루어져 있습니다.
- 특징:
- 모든 Git 명령어(예: commit, checkout, branch 등)는 로컬 저장소에서 실행됩니다.
- 인터넷 연결 없이도 작업할 수 있습니다.
- 파일의 변경 사항을 저장하고, 여러 가지 실험적인 브랜치를 만들 수 있는 독립적인 작업 공간입니다.
- 로컬 저장소에서 작업한 후, 이를 원격 저장소에 푸시할 수 있습니다.
2. 원격 저장소 (Remote Repository)
- 설명: 원격 저장소는 GitHub, GitLab, Bitbucket과 같은 서버에 호스팅된 저장소입니다. 여러 개발자가 협업하는 프로젝트에서는 보통 원격 저장소를 중심으로 작업이 이루어집니다.
- 특징:
- 중앙 저장소 역할을 합니다. 여러 개발자가 각자의 로컬 저장소에서 작업한 내용을 이 원격 저장소에 푸시하여 공유합니다.
- 로컬 저장소와는 달리, 원격 저장소는 보통 서버에 있으며, 인터넷을 통해 접근해야 합니다.
- 일반적으로 'origin'이라는 기본 이름으로 연결됩니다.
- 원격 저장소로부터 최신 업데이트를 가져올 때는 pull 또는 fetch 명령어를 사용하며, 작업 내용을 서버에 반영할 때는 push 명령어를 사용합니다.
로컬과 원격 저장소 간 작업 흐름
- Clone: 원격 저장소를 로컬로 복사하여 작업을 시작.
- Commit: 로컬 저장소에서 파일 변경 사항을 커밋하여 기록.
- Push: 로컬에서 작업한 변경 사항을 원격 저장소에 반영.
- Pull/Fetch: 원격 저장소의 최신 변경 사항을 로컬로 가져옴.
간단히 말해, 로컬 저장소는 내 컴퓨터에서 관리하는 공간이고, 원격 저장소는 여러 개발자와 공유하기 위해 서버에 저장된 저장소라고 할 수 있습니다.
1. Clone
- 새로운 프로젝트를 시작하거나 기존의 프로젝트를 가져올 때 사용합니다.
- 원격 저장소(예: GitHub, GitLab 등)에 있는 프로젝트를 로컬 컴퓨터로 복사합니다.
- 명령어: git clone <repository-url>
- 주로 가장 처음에 사용됩니다.
2. Fetch
- 원격 저장소에 있는 업데이트된 내용을 로컬 저장소로 가져오지만, 로컬 브랜치에는 적용하지 않습니다.
- 원격 저장소에 어떤 변경 사항이 있는지 확인하고 싶은 경우에 유용합니다.
- 명령어: git fetch
- 로컬에서 작업을 시작하기 전에 종종 사용됩니다.
3. Pull
- 원격 저장소의 최신 변경 사항을 로컬 저장소로 가져오고, 자동으로 로컬 브랜치에 병합합니다.
- 협업하는 과정에서 다른 개발자가 변경한 내용을 반영해야 할 때 사용합니다.
- 명령어: git pull
- 보통 작업을 시작하기 전에 원격의 변경 사항을 반영하기 위해 사용합니다.
4. Commit
- 로컬에서 작업한 변경 사항을 로컬 저장소에 기록합니다.
- 수정된 파일을 스테이징(staging)하고 커밋하여 프로젝트의 히스토리를 관리할 수 있습니다.
- 명령어:
git add <file> # 변경 파일을 스테이징git commit -m "커밋 메시지"
- 변경 사항이 있을 때마다, 작업의 특정 단계를 마칠 때마다 사용됩니다.
5. Push
- 로컬 저장소의 커밋된 변경 사항을 원격 저장소에 업로드합니다.
- 팀원들과 변경 사항을 공유하기 위해 사용하며, 보통 pull로 원격의 최신 상태를 반영한 후 사용합니다.
- 명령어: git push
- 작업을 마무리하고 변경 사항을 공유할 준비가 되었을 때 사용합니다.
정리
위의 순서를 다시 나열하면, 일반적인 흐름은 다음과 같습니다:
- clone (처음 프로젝트를 가져올 때)
- fetch 또는 pull (작업 시작 전 원격 저장소의 변경 사항을 반영)
- 코드 작성 및 변경
- commit (변경 사항을 로컬에 저장)
- push (로컬 변경 사항을 원격 저장소로 업로드)
추가 참고 사항
- fetch와 pull은 종종 교환하여 사용될 수 있습니다.
- 이미 로컬에 저장소가 있다면, clone은 생략됩니다.
- 상황에 따라 위 순서는 변경될 수 있으며, 작업하는 브랜치나 협업 방식에 따라 다소 유동적일 수 있습니다.