Git과 Github
버전관리
버전 관리 시스템(VCS, Version Control System)이란 파일 모음의 변경 사항을 추적하는 프로그램이다. VCS의 목적 중 하나는 이전 버전의 개별 파일 또는 전체 프로젝트를 손쉽게 찾아볼 수 있도록 하는 것이다. 또 다른 목적으로는 다수의 팀원들이 하나의 프로젝트를 함께 작업하면서도 서로의 작업에 영향을 끼치지 않도록 하는 것이다.
버전 관리 시스템을 사용하면 현재까지 프로젝트에 반영된 모든 변경점을 볼 수 있으며, 누가 언제 변경했는지도 확인할 수 있다. 각 변경점에 대한 기록을 남겨 타 팀원이 쉽게 이해할 수 있도록 할 수 있으며, 전에는 어땠는지 확인할 수 있다. 브랜치라는 것을 만들어 실험적으로 업데이트를 반영할 수 있으며, 이 기능은 여러 사람들이 동시에 하나의 프로젝트에 작업을 할 수 있도록 해준다.
Git은 아주 빠르고 다재다능한 오픈소스 버전 관리 시스템으로, 현대에서는 가장 많은 개발자들이 사용하고 있다.
Git Flow로 보는 버전 관리 - 출처: Evans Library
용어
Git을 이해하기 위해서는 용어에 대한 이해가 선행되어야 한다.
- Working Tree: 작업 중인 프로젝트가 포함된 디렉토리 및 파일 집합
- Repository(Repo): Git이 프로젝트의 모든 이력과 메타데이터를 저장하는 작업 트리의 최상위에 위치한 디렉토리.
- Hash: 해시함수로부터 생성된 숫자로, 파일이나 다른 객체의 내용을 표현한다. Git은 해싱을 통해 직전 파일과 비교하여 파일이 변경되었는지 알 수 있다.
- Commit: 동사로 사용되는 경우에는 커밋 객체를 만드는 것을 의미한다. 변경 사항을 커밋하여 다른 사람들도 이를 볼 수 있다.
- Branch: 일련의 연결된 커밋을 이름으로 지정한 것. 레포를 처음 초기화할 때 생성되는 기본 브랜치를 Main이라고 하며, 현재 브랜치의 헤드는 HEAD라고 한다. Git 브랜치는 개발자가 독립적으로 작업하고 추후에 변경 사항을 기본 브랜치에 병합할 수 있도록 하는 기능을 제공한다.
- Remote: 다른 Git 레포에 대해 이름을 부여하여 참조하는 것이다.
Github
처음에는 Git과 Github가 같은 것인 줄 알았다. 둘의 차이점을 살펴보자:
Git은 버전 관리 시스템으로, 다수의 개발자와 다른 컨트리뷰터가 사용하여 프로젝트에 작업할 수 있도록 해주는 프로그램이다. Github는 Git을 핵심 기술로 사용하는 클라우드 플랫폼이다. Github는 프로젝트의 협업 과정을 단순화시키며 웹사이트를 제공하여 추가 기능들을 제공한다.
Github가 제공하는 추가 기능들로는 대부분 생산성과 업무관리 측면에서의 이점을 준다:
- Issues
- Discussions
- Pull requests
- Notifications
- Actions
- Forks
기본 Git 명령어
git status
: 현재 워킹 트리의 상태를 보여준다.
git add
: 특정 파일들의 변경점들을 git이 트래킹하도록 한다. 이러한 변경 사항을 Staging이라고 하는데, git add
를 사용하여 커밋을 준비하기 위해 변경 사항을 스테이징한다. git add
를 통해 추가되었지만 아직 커밋되지 않은 모든 변경 사항들은 스테이징 영역에 저장된다.
git commit
: 스테이징된 변경점들을 스냅샷으로 저장한다.
git push
: 로컬 저장소에서 커밋된 변경 사항들을 원격 저장소(github등)으로 업로드하는 데 사용된다. 사용법은 git push [remote-name] [branch-name]
이며, 기본적으로 리모트의 이름은 origin
으로 되어있다.
추가 명령어는 Git Cheatsheet에 잘 정리되어 있다.