Git은 버전 관리 시스템이다. 말 그대로 파일이나 디렉터리를 저장해두는 곳이다. Git의 장점은 파일의 변경을 시간 순서대로 저장된다는 점이다. 따라서 파일의 변경 이력이나 전체적인 개발의 흐름을 알 수 있다.
버전 관리를 하는 가장 큰 이유는 작업이 언제나 완벽할 수 없기 때문이다. 다음 그림은 대학생 때 논문을 쓰며 생성한 수많은 한글 파일이다.
위 논문을 작성하면서 참 많은 문제점이 발생했었다.
우선 논문을 수정할 수록 한글 파일이 늘어갔다. 시간 순서에 따라 버전 번호만 늘려가다보니 해당 버전이 무엇이 수정되고 어느 내용이 변경된건지 알기 어렵다. 또 혼자 작성하는게 아니다보니 내가 수정한 부분과 다른 사람이 수정한 부분이 겹치면 통합 과정이 복잡해진다. 또한 모든 사람이 최신화된 내용으로 작업하지 않다보니 이미 수정된 부분을 다른사람이 다시 수정해버리는 경우도 발생했다.
가장 중요한 것은 무엇이 언제 어떻게 수정된것인지 알수가 없었다는 것이다. 이것으로인해 팀원들의 수정 사항을 정확하게 최신화하기 어려웠고 모든 팀원이 같은 내용으로 작업하지 못하는 최악의 경우가 발생하기도 했다.
여기서 논문을 프로그래밍으로 바꾸면 왜 버전 관리가 필요한지 이해할 수 있다.
어떤 파일이 언제 어떻게 생성/수정/삭제 되는지 쉽게 파악할 수 있게 하기위해 버전 관리가 필요한것이다. Git은 이러한 버전 관리 도구 중 하나이다.
GitHub는 Git을 저장할 수 있는 웹 호스팅 서비스이다. GitHub에 작업한 내역을 저장하고 언제든 불러오거나(pull), 저장하거나(push), 작업한 내용을 원본과 합칠수도(pull request) 있다. 서버에 저장되기 때문에 팀원은 더 빠르고 효율적으로 어디서든 작업할 수 있다. GitHub가 아닌 GitLab 등 다른 웹 호스팅 서비스가 있다.