GIT(깃)은 2005년 리누스 토르발스에 의해 개발된 ‘분산 버전관리 시스템(Distributed Version Control Systems)으로, 원래는 Linux 소스코드를 관리할 목적으로 만들어졌지만 컴퓨터 파일의 변경사항을 추적하고 여러 사용자들 간에 해당 파일 작업을 조율하기 위한 대표적인 버전 관리 시스템(VCS)이다
즉, 주로 여러명의 개발자가 하나의 소프트웨어 개발 프로젝트에 참여할 때, 소스 코드를 관리하는데 사용된다 버전관리가 왜 필요한가 보면은, 각 버전의 파일을 복사, 저장, 백업하는 버전 관리의 하나의 방법이가도 하지만, 어느것이 가장 최근의 파일인지 보기 어렵고 비효율적인 문제가 있기 때문에 버전관리를 통해 각 파트별로 만든 파일을 본 파일에 합치는 과정을 돕는 시스템이다
SVN vs GIT
Git이 Svn과 다른 점은 분산형 관리 시스템이라는 것이다. SVN은 중앙 서버에 소스코드와 히스토리를 저장하는 것과 달리 GIT은 소스코드를 여러 개발 PC와 저장소에 분산해서 저장하기 때문에 중앙 서버에 장애가 발생해도 로컬 저장소에 커밋을 할 수 있으며, 로컬 저장소들을 이용하여 중앙 저장소의 복원도 가능하다
장점
- 소스코드를 주고 받을 필요 없이, 같은 파일을 여러명이 동시에 작업하는 병렬 개발이 가능하다
- 개발 branch라는 별도의 공간으로 분리해 각각의 작업물을 수행하며, 브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식인 Merge로 개발을 진행할 수 있다
- 분산 버전 관리이기 때문에 인터넷 연결이 되지 않는 곳에서도 개발을 진행 할 수 있다
- 중장 저장소가 삭제되어도 원상복구가 가능하다
- 체계적인 개발이 가능해지며 프로그램이나 패치를 배포하는 과정도 간단해진다
깃 기본 용어
- Repository : 저장소를 뜻한다. 즉, 히스토리, 태그, 소스의 버전을 저장한다
- Working Tree : 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점이다
- Staging Area : 저장소를 커밋하기 전에 커밋을 준비하는 위치
- Commit : 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장
- Head : 현재 작업중인 Branch를 가르킨다
- Branch : 가지 또는 분기점. 현재 상태를 복사 → branch에서 작업 후 Merge를 하여 작업을 한다
- Merge : 다른 Branch 내용을 현재 Branc로 가져와 합치는 작업을 의미한다
깃 기본 명령어
- git help - 도움말 기능 (가장 많이 사용하는 21개의 깃 명령어 출력) 사용법이 궁금한 명령어에 대해 git help [궁금한 명령어] 타이핑시, 해당 명령어의 설정과 사용에 대한 도움말을 출력해준다
- git init - 깃 저장소를 초기화. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다 즉, 이 명령어를 입력한 후에야 추가적인 깃 명령어를 입력할 수 있으며 버전관리 하고싶은 폴더에서 초기화를 하는 준비이다
- git status - 저장소 상태 체크. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 상태정보를 출력한다
- git branch - 새로운 브랜치 즉, 독립적인 공간을 생성한다. 여러 협업자와 작업할 시, 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 생성한다. 브랜치에서 수정하고 커밋하면 master 브랜치에는 어떤 영향도 주지 않는다
- ex) git branch feature/login 이라는 login기능을 master에서 분리 왜? 혼자만 작업하면 상관없지만 하나의 프로젝트를 수십 수백명이 작업을 한다면 복잡해진다 즉, branch라는 별도의 공간으로 분리해 각각의 작업물을 수행한다
- git add - staging 영역에 변경내용 추가한다. commit 명령 전까지 변경된 내역을 staging 영역에 보관하여 저장한다
- git commit - git add로 staging area에 있는 변경 내용 묶음 및 정의 즉, 의미있는 수정 작업이 끝났을 때 마침을 알리는 작업
- git log - git commit한 내역을 확인할 때 쓰는 명령어
- git push - 로컬 컴퓨터에서 서버로 변경사항을 push하는 명령어
- git pull - 서버 저장소로부터 최신 버전을 pull 즉, 서버 저장소의 데이터를 가져와, 현재 브랜치와 merge (합치는) 하는 명령어
- git clone - 서버 저장소의 데이터를 로컬 컴퓨터로 복사하는 명령어이다. 서버 저장소의 데이터를 그대로 가져오므로 작업 중이던 내역이 있을 시 덮어씌어지는 불상사가 일어난다
- git checkout - 작업하기 원하는 브랜치로 이동한다
- git merge - 개별 branch에서 마친 작업을 master로 병합할때 쓰는 명령어이다
주의:
- 잘못된 코드가 있으면 전체 프로젝트의 영향이 가기 때문에 master로는 직접적으로 push하면 안 된다
- 내가 작업하던 환경을 제대로 봐야한다 branch로 나눠서 작업을 했으면 위치가 다르기 때문에 master를 pull하기 위해서는 내 local master로 돌아가야 한다
- git checkout master → git pull origin master
Github
- Git을 사용하는 프로젝트를 지원하는 웹 호스팅 서비스
출처 : 아래의 사이트들을 보면서 큰 공부 하였습니다
https://goddaehee.tistory.com/91
https://java-man.tistory.com/12
https://yanacoding.tistory.com/entry/Git-깃git과-깃허브github란-무엇인가