Git & GitHub 개념 및 용어
🎁 Git & GitHub 이해하기

Git
Git 이란 버전 관리 시스템(VCS) 중 하나로, 프로젝트의 소스 코드나 파일들의 변경 이력을 관리하고 추적하는 도구이다.
작동방식은 스냅샷 방식으로 여러 명의 개발자가 동시에 작업할 수 있고, 변경 사항 추적과 관리할 수 있다. 이를 통해 프로젝트의 버전을 관리하고, 이전 상태로 손쉽게 복구하거나 변경 사항을 비교할 수 있다.
위쪽의 작동 구조 이미지를 보면 쉽게 이해할 수 있다.
내 컴퓨터 (local) : Working Directory, Staging Area, local Repositoy
원격(remote, GitHub) : Remote Repository
GitHub
GitHub는 Git을 기반으로한 웹 기반의 호스팅 서비스로, Git 저장소를 호스팅하고 버전 관리를 위한 다양한 기능을 제공한다. GitHub를 사용하면 개발자들은 프로젝트를 협업하고 관리할 수 있으며, 소스 코드를 온라인 상에서 공유하고 협업할 수 있다.
Git & Github 관련 용어 및 주요 명령어
Working Directory
내 컴퓨터에 있는 작업 폴더를 말한다. Git에서 관리하지만 추적은 하지 않는다.
Staging Area
git 디렉토리에 있으며, 단순한 파일이고, 곧 커밋할 파일에 대한 정보를 저장한다. 즉, 임시 저장 영역이라고 보면 된다.
Local Repository
커밋들이 영구적으로 저장되는 영역이다. 내가 수정한 파일들을 커밋할 때마다 Local Repository 에 커밋들이 쌓인다. 또한 원격 저장소로부터 clone한 커밋들이 존재하는 역역이기도 하다.
Remote Repositry
Local 이 아닌 원격 서버(GitHub)에 저장된 저장소로, 사용자가 직접 관리하는 저장소이다.
Add
git add [파일 이름]
Git이 해당 파일의 변경 사항을 추적하도록 하는 단계이다.
Working Directory 에서 Staging Area 로 추가한다.
Commit
git commit -m [확정본에 대한 설명]
Git에 저장하는 단계로, Staging Area 에 있는 변경된 파일을 Local Repository에 영구적으로 기록한다. 이러한 변경된 파일은 HEAD 에 반영 된다.
Push
git pushgit push origin [가지 이름]
로컬 저장소의 커밋들을 원격저장소로 업로드하는 단계이다. 커밋한 파일들은 아직 원격 저장소가 아닌 로컬 저장소의 HEAD 안에 머물고 있어 push를 이용하여 원격 서버로 올려야 한다.
Branch
git branch [new 가지 이름]: 가지 생성
이름 그대로 ‘가지를 친다’ 라고 말한다. 저장소를 만들면 기본으로 main(또는 master) 가지가 만들어지고 거기서 다른 가지( = branch)를 만들어 개발을 하는 것이다. 개발이 완료되면 main(또는 master) 가지로 돌아와 병합 (merge)를 하면 된다.
Pull
git pull
내 컴퓨터에 있는 로컬 저장소를 원격 저장소에 맞춰 갱신할 때 사용하며, 원격 저장소의 변경 내용이 로컬 작업 디렉토리에 받아지고(fetch) 병합(merge)된다. pull을 이용하면 최신 상태의 원격 저장소 파일을 받을 수 있어 작업 시작 시에 이용하기 좋다.
Merge
git merge [new 가지 이름]
두 개의 다른 브랜치를 하나로 합치는 명령어이다. 하지만 병합 중 충돌(conflicts)이 일어날 때도 있다. 그럼 git은 충돌 부분을 알려주고, 내가 직접 수정하여 병합이 가능하도록 한다.
git diff [원래 가지 이름] [new 가지 이름]을 이용하면 변경 내용을 병합하기 전에 어떻게 바뀌었는지 비교할 수 있다.
Checkout
git checkout --[파일 이름]
오래된 Git 명령어로, 브랜치 전환, 새 브랜치 생성, 파일 복구 등 다양한 작업을 처리하는데 사용한다. 만약 파일의 변경 사항이 잘못 되었을 때, checkout을 통해 변경 전 상태(HEAD)로 되돌려 준다.만약 로컬에 있는 모든 변경 내용과 확정본을 포기하려면,
git fetch origin또는git reset --hard origin/master로 원격 저장소의 최신 이력으로 가져오고, 로컬 master 가지가 저 이력을 가리키도록 할 수 있다.
Switch
git switch [가지 이름]
말 그대로 브랜치를 변경할 때 사용하고,-c를 추가하면 새 브랜치 생성 및 이동을 할 수 있다. checkout과 기능적으로 중복되는 부분이 있지만 가지간 이동할 때 switch 사용을 하는 것이 편하다.
Fetch
git fetch
원격 저장소에서 최신 데이터 정보를 확인할 뿐, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않는다. 그래서 병합 전 변경 내용을 검토할 수 있어, pull 보다는 fetch가 안전하다.
Pull Request
기존
branch에 내가 만든 branch를 merge 해달라고 요청 또는 피드백 받는 곳이다.
Fork
남의 저장소(Remote)에서 내 저장소로 가져오는 작업이다.
ISSUES
GitHub에서 커뮤니케이션을 통해 문제 해결하는 곳이다. 예를 들어 남이 만든 저장소에 내가 수정하고 싶은 곳이나 버그가 있어 따로 Branch 파일을 만들었다면, 그 Branch 파일을 남의 ISSUES 탭에 내가 만든 Branch 파일을 올리고 ㅇㅋ 하면 내가 만든 파일을 합쳐서 수정하기도 한다. 다른 사람이 수정 사항이 있으면 댓글을 달아주기도 한다.
README
Markdown을 통해 README.md 를 만들 수 있다. 나의 작업물에 대한 설명을 적어놓는 곳이기도 하며 저장소 하단에 나타난다.
Leave a comment