
Git 이란?
Git(깃) 은 컴퓨터 파일들의 변경 사항을 추적하고 여러 명의 사용자들 간 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템(Distributed Version Control System)과 그 명령어를 말한다. 쉽게 말해 협업 도구로써 소스의 버전 관리를 도와주는 툴이다.
깃은 현재 가장 많이 사용되는 버전 관리 시스템으로 대부분의 웹, 앱 어플리케이션 개발에서 소스 코드 관리에 주로 사용된다. 또한 어떤 파일들의 변경 사항을 지속적으로 추적할 수 있다.
쉽게 말해 한 소프트웨어 개발에 여러 명의 개발자가 투입될 때, 이들이 작성한 소스 코드들을 효율적으로 관리하는데에 사용된다.
만약 A라는 프로젝트를 5명의 개발자가 진행한다고 하자. 개발자 1은 회원가입 로직, 개발자 2는 로그인 로직, 개발자 3은 상품 주문 로직 등 각자 주어진 역할이 다를 수 있다. 깃을 이용하면 각자 맡은 로직을 개발한 뒤 코드를 합쳐 하나의 서비스를 완성할 수 있다. 또한 중간에 생기는 버그나 수정사항을 고친 뒤 기존 서비스에 적용하는 등 버전 관리도 할 수 있다.
GitHub , GitLab
이들은 모두 깃 저장소에 대한 원격 액세스를 제공하는 서비스로, 깃을 사용자들이 쉽고 효율적으로 사용할 수 있게 도와준다. 특히 전체적인 소프트웨어 개발의 생명 주기를 관리할 수 있어 프로젝트 규모가 클 때 깃의 강력한 장점을 살릴 수 있다.
1. GitHub

GitHub (깃허브) 는 공개적으로 사용할 수 있는 무료 서비스이다. 'Repository' 라는 저장소 개념을 사용하며, 이곳에 코드나 정보들을 올릴 수 있다. 개인 저장소로도 활용할 수 있지만 깃허브는 공동 개발 플랫폼이기도 하여 협력시 큰 힘을 발휘한다. Ruby on Rails 로 만들어진 깃허브는 프로그램의 소스 코드에서 작동하여 효율적인 개발이 가능하다.
하지만 깃허브는 무료로 이용할 경우 제한이 있는데, 프로젝트는 1GB, 파일은 100MB를 초과하면 안된다. 또한 프로젝트를 비공개로 호스팅할 수 없다. 그럼에도 깃허브를 많이 사용하는 이유는 속도가 빠르고 개인이 관리하기 편하기 때문이다.
2. GitLab

GitLab 은 깃허브와 마찬가지로 Git 을 기반으로 한 소프트웨어 서비스 및 제어 시스템을 가진 시스템이다.
깃랩이 깃허브와 다른 점은 자체 호스팅 깃 저장소 관리 시스템으로 사용자 코드를 비공개로 유지하고, 코드의 변경 사항을 쉽게 배포할 수 있다. 이런 이유로 많은 회사에서 보안을 위해 깃랩을 많이 이용하고 있다.
또한 깃랩은 무제한의 사용자가 공개 및 비공개 프로젝트를 공동으로 수행할 수 있고, 저장소당 10GB까지 사용할 수 있다.
만약 보안을 생각하여 비공개 호스팅을 원한다면 깃랩을 사용하면 된다.
이외에도 Git 기반의 서비스로는 Bitbucket 등이 있다.
Git 동작 원리
깃의 강력한 기능을 이해하려면 동작 원리를 알면 좋다. 깃의 데이터들은 파일 시스템 상에서 스냅샷(Snapshot) 이라고 볼 수 있다. 여기서 스냅샷은 사진을 찍듯 특정 시점에 스토리지 파일 시스템을 포착, 보관하는 기술을 말한다.
다시 말해 어떤 파일에 대해 수정과 저장의 반복의 과정에서 최종적으로 저장된 파일 뿐만 아니라, 그동안의 수정 내역까지 모두 저장한다는 뜻이다.
깃 프로젝트는 크게 네 가지 요소(영역)로 나뉠 수 있다.

1. Working Directory : 현재 작업하는 파일이 있는 디렉토리를 말한다. 'add' 명령어를 통해 Staging 할 수 있다.
2. Staging Area : 깃은 변경 사항이 있는 파일에 대해 Local Repository 로 보낼 파일들을 설정할 수 있으며, 해당 파일들이 임시로 저장되는 곳이다. 'commit' 명령어를 통해 Local Repository 로 보낼 수 있다.
3. Local Repository : Staging Area 의 파일들이 최종적으로 현재 컴퓨터에 저장되는 저장소이다. 즉, 다음 단계인 Remote Repository (원격 저장소)에 저장하기 전 거치는 컴퓨터의 최종 저장소이다. 'push' 명령어를 통해 Remote Repository 로 보낼 수 있다.
4. Remote Repository : 원격 저장소로, 깃허브에서 사용하는 Repository 를 말한다.
이렇게 각 저장소마다 단계를 거치며 최종 저장소에 다다른다. 여기서 중요한 점은 소스 파일의 변경점, 커밋 내역 등 모든 작업 이력이 담긴다는 것이다. 각 커밋 내역들은 해시값을 통해 관리되며, 이런 메타 데이터를 포함해 프로젝트를 관리하는 각종 데이터는 '.git' 이라는 폴더에 담긴다. (숨겨진 파일이므로 mac 기준 command+shift+. 을 통해 볼 수 있다.)

Git 이란?
Git(깃) 은 컴퓨터 파일들의 변경 사항을 추적하고 여러 명의 사용자들 간 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템(Distributed Version Control System)과 그 명령어를 말한다. 쉽게 말해 협업 도구로써 소스의 버전 관리를 도와주는 툴이다.
깃은 현재 가장 많이 사용되는 버전 관리 시스템으로 대부분의 웹, 앱 어플리케이션 개발에서 소스 코드 관리에 주로 사용된다. 또한 어떤 파일들의 변경 사항을 지속적으로 추적할 수 있다.
쉽게 말해 한 소프트웨어 개발에 여러 명의 개발자가 투입될 때, 이들이 작성한 소스 코드들을 효율적으로 관리하는데에 사용된다.
만약 A라는 프로젝트를 5명의 개발자가 진행한다고 하자. 개발자 1은 회원가입 로직, 개발자 2는 로그인 로직, 개발자 3은 상품 주문 로직 등 각자 주어진 역할이 다를 수 있다. 깃을 이용하면 각자 맡은 로직을 개발한 뒤 코드를 합쳐 하나의 서비스를 완성할 수 있다. 또한 중간에 생기는 버그나 수정사항을 고친 뒤 기존 서비스에 적용하는 등 버전 관리도 할 수 있다.
GitHub , GitLab
이들은 모두 깃 저장소에 대한 원격 액세스를 제공하는 서비스로, 깃을 사용자들이 쉽고 효율적으로 사용할 수 있게 도와준다. 특히 전체적인 소프트웨어 개발의 생명 주기를 관리할 수 있어 프로젝트 규모가 클 때 깃의 강력한 장점을 살릴 수 있다.
1. GitHub

GitHub (깃허브) 는 공개적으로 사용할 수 있는 무료 서비스이다. 'Repository' 라는 저장소 개념을 사용하며, 이곳에 코드나 정보들을 올릴 수 있다. 개인 저장소로도 활용할 수 있지만 깃허브는 공동 개발 플랫폼이기도 하여 협력시 큰 힘을 발휘한다. Ruby on Rails 로 만들어진 깃허브는 프로그램의 소스 코드에서 작동하여 효율적인 개발이 가능하다.
하지만 깃허브는 무료로 이용할 경우 제한이 있는데, 프로젝트는 1GB, 파일은 100MB를 초과하면 안된다. 또한 프로젝트를 비공개로 호스팅할 수 없다. 그럼에도 깃허브를 많이 사용하는 이유는 속도가 빠르고 개인이 관리하기 편하기 때문이다.
2. GitLab

GitLab 은 깃허브와 마찬가지로 Git 을 기반으로 한 소프트웨어 서비스 및 제어 시스템을 가진 시스템이다.
깃랩이 깃허브와 다른 점은 자체 호스팅 깃 저장소 관리 시스템으로 사용자 코드를 비공개로 유지하고, 코드의 변경 사항을 쉽게 배포할 수 있다. 이런 이유로 많은 회사에서 보안을 위해 깃랩을 많이 이용하고 있다.
또한 깃랩은 무제한의 사용자가 공개 및 비공개 프로젝트를 공동으로 수행할 수 있고, 저장소당 10GB까지 사용할 수 있다.
만약 보안을 생각하여 비공개 호스팅을 원한다면 깃랩을 사용하면 된다.
이외에도 Git 기반의 서비스로는 Bitbucket 등이 있다.
Git 동작 원리
깃의 강력한 기능을 이해하려면 동작 원리를 알면 좋다. 깃의 데이터들은 파일 시스템 상에서 스냅샷(Snapshot) 이라고 볼 수 있다. 여기서 스냅샷은 사진을 찍듯 특정 시점에 스토리지 파일 시스템을 포착, 보관하는 기술을 말한다.
다시 말해 어떤 파일에 대해 수정과 저장의 반복의 과정에서 최종적으로 저장된 파일 뿐만 아니라, 그동안의 수정 내역까지 모두 저장한다는 뜻이다.
깃 프로젝트는 크게 네 가지 요소(영역)로 나뉠 수 있다.

1. Working Directory : 현재 작업하는 파일이 있는 디렉토리를 말한다. 'add' 명령어를 통해 Staging 할 수 있다.
2. Staging Area : 깃은 변경 사항이 있는 파일에 대해 Local Repository 로 보낼 파일들을 설정할 수 있으며, 해당 파일들이 임시로 저장되는 곳이다. 'commit' 명령어를 통해 Local Repository 로 보낼 수 있다.
3. Local Repository : Staging Area 의 파일들이 최종적으로 현재 컴퓨터에 저장되는 저장소이다. 즉, 다음 단계인 Remote Repository (원격 저장소)에 저장하기 전 거치는 컴퓨터의 최종 저장소이다. 'push' 명령어를 통해 Remote Repository 로 보낼 수 있다.
4. Remote Repository : 원격 저장소로, 깃허브에서 사용하는 Repository 를 말한다.
이렇게 각 저장소마다 단계를 거치며 최종 저장소에 다다른다. 여기서 중요한 점은 소스 파일의 변경점, 커밋 내역 등 모든 작업 이력이 담긴다는 것이다. 각 커밋 내역들은 해시값을 통해 관리되며, 이런 메타 데이터를 포함해 프로젝트를 관리하는 각종 데이터는 '.git' 이라는 폴더에 담긴다. (숨겨진 파일이므로 mac 기준 command+shift+. 을 통해 볼 수 있다.)