오늘은 개발자라면 필수적으로 알아야 하는 Git과 Github에 대해 알아보도록 하겠습니다.
위의 내용을 통해 Git이 무엇인지 살펴보았습니다.
이제는 이를 바탕으로 구체적으로 Git 과 GitHub에 대해 살펴보겠습니다.
Git 은 로컬에서 버전을 관리해주는 프로그램입니다. 그러나, 위에서 언급한 Git의 기능을 활용하려면 온라인 원격 저장소가 필요합니다. 이러한 원격 저장소 기능을 제공해주는 서비스 중 하나가 GitHub 이고 GitHub는 Git Repository를 관리할 수 있는 클라우드 기반 서비스입니다.
즉 Git으로 버전을 관리하는 폴더에 대해서 GitHub을 통해 여러 사람들이 공유하고 접근할 수 있습니다.
Git으로 관리되는 폴더를 Git repository 라고 합니다.
Git repository 는 Remote Repository와 Local Repository 두 종류의 저장소를 제공합니다. 작업할 때는 Local Repository에서 할 수 있고 내가 작업한 코드를 공유하려면 Remote Repository에 업로드해 여러 사람이 함께 공유할 수 있습니다. 다른 사람이 Remote Repository에 올려놓은 소스 코드를 내 Local Repository 로 가지고 올 수도 있습니다.
다른 사람이 만든 프로젝트의 원격 저장소를 내 원격 저장소로 가지고 오는 작업을 Fork 라고 합니다.
Fork 를 하고 나면 나의 Remote Repository에 코드를 옮겨온 상태입니다. 이 코드를 수정하기 위해서는 내 로컬 컴퓨터로 가져오는 작업이 필요합니다. 그 과정을 Clone 이라고 합니다. Remote Repository에 있는 코드를 Clone 해서 내 컴퓨터로 가지고 옵니다.
내 컴퓨터에서 소스코드 변경 작업을 완료했다면 이 변경된 내용을 commit을 통해 저장해 준 뒤, Remote Repository에 반대로 올려주는 작업이 필요합니다. 이 과정을 Push 라고 합니다. Local Repository에 기록해 놓은 commit을 Remote Repository로 업로드할 수 있습니다. 이렇게 Push를 완료하고 나면 GitHub에는 Pull request라는 기능이 있어서, 내가 제안한 코드 변경사항에 대해 반영 여부를 요청할 수 있습니다.
Push와는 반대로 Remote Repository에서 변경 사항이 있을 때 내 Local Repository 로 가져오는 작업이 Pull 입니다.
위의 그림은 다음과 같습니다.
Remote에 있는 다른 Repository에서 Fork를 해서 Remote에 있는 내 Repository에 가지고 옵니다.
그리고 이 코드를 수정하기 위해서는 내 컴퓨터로 가져오는 clone을 합니다.
이제 내 컴퓨터의 작업 공간 (work space) 에서 작업에 들어간 파일들을 git의 관리하에 있는 상태로 올려줄 수 있습니다. 이 영역을 staging area라고 말합니다. 즉, staging area에 들어오지 않은 파일은 unstaged 혹은 untracked file이라고 말하며, staging area에 있는 파일들은 staged 된 파일이라고 말할 수 있습니다.
staging area에 들어온 파일들은 commit이 가능합니다. commit을 하고 나면 내 remote repository에 push 해서 commit 기록을 remote 에도 남겨줄 수 있습니다.
push를 완료한 후 이제 remote의 원래 레파지토리에 pull request를 보내면 Remote Repository로 내가 수정한 코드를 업로드할 수 있습니다.
지금까지 Git이 무엇인지, 그리고 어떤 기능을 제공하는지 살펴보았습니다. 다음 글에서는 Git의 설치 방법과 명령어를 사용해보는 실습을 하겠습니다.