깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템이다. 소프트웨어 개발에서 소스 코드 관리에 주로 사용되지만 어떠한 집합의 파일의 변경사항을 지속적으로 추적하기 위해 사용될 수 있다. 기하학적 불변 이론을 바탕으로 설계됐고, 분산 버전 관리 시스템으로서 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로우를 지원한다.
깃은 2005년에 리눅스 커널 개발을 위해 초기 개발에 기여한 다른 커널 개발자들과 함께 2005년에 리누스 토발즈가 처음 개발한 것이다. 2005년부터 지금까지 주니오 하마노가 소프트웨어의 유지보수를 맡고 있다.
다른 대부분의 분산 버전 관리 시스템처럼, 또 대부분의 클라이언트-서버 시스템과 달리, 모든 노드의 모든 깃 디렉토리는 네트워크 접속이나 중앙 서버와는 독립적으로 동작하는 완전한 이력 및 완전한 버전 추적 기능을 갖춘 성숙한 저장소이다.
오픈소스계의 영원한 아이돌 리누스 토발즈는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 git이라는 소스관리 툴을 만든다. 리누스는 하도 빡친 나머지, 단 2주만에 완성하는 기염을 토했다. (그러고는 후에 “git 만드는게 제일 쉬웠어요”라는 인터뷰로 나와 같은 빠돌이를 지리게 했다.)
📎오픈소스의 승리 중에서.
지금까지 깃을 사용해본 결과 상당히 익히기 어렵다. 개념이 무척이나 헷갈리기도 하고 터미널 사용법이나 Vim 에디터 사용법도 익혀야해서 초보자들이 접근하기엔 무리가 있을것 같다는 생각이 든다. 하지만 버전 관리가 무척이나 편하다. 특히 브랜치를 만들어서 작업 후 마스터에 병합하는 과정이 신기했다. 물론 컨플릭트가 안난다는 가정하에...
git 명령어를 설명하기 전에 간단하게 git의 work flow에 대해서 설명하자면 내 local에서 작업한 파일들을 곧바로 Remote repository에 반영하지 않고 중간 단계인 Staging area를 거쳐서 반영이 된다. 그래서 만약 실수가 있다던가 잘못 올린 파일들이 있으면 수정하여 다시 올릴 수가 있다. 또한 여러개의 파일중에 일부만 올리는것도 가능하다.
git을 사용하기위해서는 먼저 저장소를 만들어야 한다. 저장소를 만드는 방법에는 두 가지가 있는데 아예 새로운 저장소를 만드는 것과 이미 만들어져있는 Remote repository를 clone하여 만드는 방법이 있다. git init
은 그중에서 첫 번째 방법이다. git init
을 이용하는 방법은 터미널에서 저장소를 만들고자 하는 디렉토리에 접근 후 git init
을 입력하면 .git
파일이 생성된다. 그러면 성공이다.
$ cd git 저장소를 만들고자 하는 폴더
$ git init
git clone
도 git init
과 마찬가지로 간단하다. 똑같이 만들고자하는 디렉토리에 접근 후 터미널에서 git clone
뒤에 복사하고자 하는 repository의 URL만 붙여넣기 하면 끝.
$ git clone https://github.com/facebook/react.git
이런식으로 해주면 Remote repository의 파일들이 내 local로 복사가 된다.
git add
는 수정한 파일들을 Staging area 올리는 과정이다. 하지만 git add
를 한다고 해서 변경 내역이 바로 반영되지는 않는다. git add
만 입력할게 아니라 git add
에는 여러가지 옵션이 있다.
$ git add .
$ git add *.js
$ git add 파일명
$ git add -u
$ git add -A
이정도가 있다.
git add .
: 변화된 파일과 추가된 파일 모두를 add 한다.git add *.js
: 확장자가 .js인 파일 모두를 add 한다.git add 파일명
: 파일명에 해당하는 파일을 add 한다.git add -u
: 변화된것과 삭제된 것만 add 한다.git add -A
: git add.
과 git add -u
를 동시에 실행한 것과 같은 명령어이다. 삭제된 파일이 있을 경우 이 명령어를 통해 add 한다.git commit
은 add를 통해 Staging area에 올라간 파일들의 변경내역을 확정하는 단계이다. git은 commit 단위로 변화를 저장하기 때문에 commit은 가장 중요하고 신중해야하는 단계이다. 자주 commit을 하게되면 너무 복잡해지고 드물게 commit을 하게되면 내용 확인이 상대적으로 힘들어 진다. 기본 명령어는 다음과 같다.
$ git commit
위와 같이 터미널에 입력하면 Vim 에디터가 실행되고 commit 메세지를 쓸 수 있다.
$ git commit -m '커밋 내용'
위와 같이 입력하면 Vim 에디터가 실행되지 않고 커밋 내용이 곧바로 반영된다.
commit을 했다고 해서 그 내용이 Remote repository에 반영되는것은 아니다. push를 통해 master 브랜치로 머지해야 내 변경사항들이 반영된다. 보통은 master 브랜치 상에서 작업하지 않고 다른 브랜치를 만들어서 작업 후 master로 머지하기 때문에
$ git push origin 브랜치명
위와 같이 입력하여 push후 pull request를 통해 최종적으로 master 브랜치로 머지한다. master 브랜치에서 작업을 했다면
$ git push origin master
라고 쓰면 된다.
만약 기존에 있던 Remote repository를 clone한것이 아니라면 Remote repository의 주소를 git에게 알려줘야 하는데
$ git remote add origin 주소
를 입력하면 push가 가능하다.
git branch
명령어를 통해 새로운 브랜치를 생성할 수 있다.
$ git branch feature/syj
이렇게 입력하면 feature/syj
라는 브랜치가 생성된다. 하지만 생성했다고 해서 바로 그 브랜치로 가는 것은 아니다. git checkout feature/syj
라는 명령어를 입력해야만 비로소 내가 만든 브랜치로 갈 수 있는 것이다. 이 과정을 줄이고 싶으면
$ git checkout -b feature/syj
라고 입력하면 브랜치를 생성 후 새로 만든 브랜치로 갈아탄다. 브랜치를 생성했으면 또한 삭제도 가능하다. 브랜치 삭제는 아래와 같이 입력하면 된다.
$ git branch -d feature/syj
그러면 feature/syj
라는 브랜치는 삭제가 된다.
git log
를 입력하면 누가 언제 어떤 commit을 남겼는지 확인가능하다.