본문 바로가기

Dev/Git

Start Git!!!

 C 기반의 펌웨어를 주 업으로 삼고 있던 동안은 나 혼자 모듈 하나를 맡아서 혼자 개발하고 혼자 유지보수를 하다보니 형상관리 Tool이라는 것을 쓸 일이 없었다.

그냥 프로젝트 폴더에 날짜 붙여서 계속 복붙하며 리버전 해와도 전혀 문제가 없었고, SVN이라는 물건이 있는 것 정도만 알고 있었다. 

그런데 작년부터 개발 업무가 웹 분야로 전환되면서 형상관리 Tool로 Git을 사용하기 시작했다.

 요즘 형상관리의 대세는 Git이다.(라고 대부분들 말한다.) 기존 SVN을 사용하던 사람들은 Git을 사용하는데 어느정도의 진입장벽이라는게 존재한다고는 하지만, 

난 처음 써본 형상관리 Tool이 Git이었기에... SVN과 어떤 차이가 있는지는 모르겠지만... SVN을 안써봤다고 해서 진입장벽이 낮지는 않은 것 같다. 젠장 -_-;;

Git Workflow에 대한 설명을 진행해야 되는 일도 있고 해서 Git에 대한  전반적인 명령어를 조금씩 훓어보려고 한다.


Why Git??

  시작하기 전에 Git이 뭔지 정도는 알아야 할 것 같다. Git.. 형상관리 Tool이다. 

좀 더 어렵게 말하면 분산 형상관리 Tool이라고 하는 사람들도 있는데, 그렇게 말해봐야 별로 와닿지도 않고..... 

사람들은 대부분 기존에 쓰던 것이 크게 문제가 없으면 쉽게 변화하지 않으려고 한다. 그래서 SVN을 쓰던 대부분의 사람들은 계속 그걸 써왔으니까, 짜잘한 문제는 있지만 쓰면서 크게 별 문제가 없었던 것 같으니까 그냥 계속 SVN을 쓴다. 그렇다면 SVN을 놔두고 왜 Git이 대세가 되어가고 있는걸까?


 

  SVN과 비교를 해볼 수 있는 그림이 있으면 좋은데 적당한 것을 못찾았다. Git은 SVN과는 달리 Git에는 Local Repository라는 개념이 있다. 

Git의 workflow는 간략히 설명하자면, 본인의 개발 장비의 로컬 드라이브에 레파지토리를 중복해 구성하여 자신이 개발할 것에 대해서 코딩/테스트를 다 진행해본 뒤, 로컬 레파지토리에 Add,Commit을 하고 리모트 레파지토리에 한번 더 push한다. 반면 SVN은 로컬 레파지토리라는 개념이 없어서 로컬에서 개발하고 바로 remote에 commit을 한다. 그렇다면 결과적으로 Git이 로컬에 레파지토리가 하나가 더 있어서 commit 이외에 push라는 작업을 한번 더 거쳐야 하는데, 이것이 주는 효과는 다음의 경우에 발생한다.


(1). 형상관리 서버와의 연결이 끊겼을 때.

- 로컬에 레파지토리가 있기 때문에 서버와 연결이 끊기더라도 개발자는 계속된 작업이 가능하다.

(2). SVN의 경우 다수의 개발자가 동시에 commit을 해서 레파지토리의 여러 파일들이 conflict나는 상황이 발생했을 때.

- 해당 conflict에 대해서 수정을 진행하는 동안에는 다른 개발자들은 해당 문제가 해결될 때까지 손가락만 빨고 기다려야 한다.

- Git의 경우에는 로컬레파지토리에 다른 사람들의 작업한 내용들을 pull하여 로컬 레파지토리에서 conflict를 해결한 뒤에 remote에 푸시하기 때문에, 리모트 서버의 레파지토리는 항상 안정적인 상태를 유지할 수 있다.

(3). A라는 기능을 신규로 개발하던 도중에 갑자기 B라는 기능을 먼저 추가해달라는 요구사항이 들어올 때.

- 해당 상황의 경우는 로컬 레파지토리의 추가로 인한 효과로 보기는 어렵지만, Git의 제일 강력한 기능인 'Branch'기능을 사용할 수 있다.

- SVN의 경우에는 A라는 기능 추가에 대한 작업물에 대해서는 따로 개발자가 백업을 해놓은 뒤에 레파지토리를 reset하고 B에 대한 기능추가 작업을 진행하지만, Git은 A라는 작업 내용에 대해서는 로컬 레파지토리에 commit만 해놓은 상태에서 새로 branch를 생성하여, checkout한 뒤에 B라는 작업을 진행하면 된다. B라는 작업이 끝난 뒤에는 A작업을 하고 있는 branch로 다시 checkout해서 A작업을 마저 한다. A작업 branch와 B작업 branch를 merge가 가능하다. 이 모든 것은 로컬 레파지토리에서 이루어지며, 리모트 레파지토리에서도 브랜치 관리가 가능하다.


이정도면 Git을 써야하는 이유에 대해서는 충분히 설명한 것 같다. Git Client 설치나 코드 공유 SNS인 Github, Bitbucket은 검색하면 많이 나오므로 패스!!

다음은 참고할 만한 사이트이다.


(1)http://www.git-scm.com/ 

- Git Client는 이곳에서 설치하면 된다. Git client를 설치하면 git gui라는 GUI를 제공하는 클라이언트 툴과 git bash라는 커맨드 툴을 제공한다. git gui는 사실 많이 별로다. GUI Tool을 이용하려면 소스트리(http://www.sourcetreeapp.com/)가 가장 이쁘고 쓰기도 좋다. git에 적응되면 git bash에서 직접 커맨드를 입력하는게 더 편하다.


(2)https://github.com/ 

- 가장 크고, 유명한 코드 공유 SNS이다. 세상의 대부분의 오픈소스들은 이곳에 있다고 생각하면 된다. 소스포지에 있던 오픈소스들도 대부분 이쪽으로 이사를...


(3).https://bitbucket.org/

- 깃허브는 회원들에게 private repository를 무료로 제공해주지 않는다. private repository를 무료로 제공해주는 코드공유 SNS 중에는 가장 유명한듯. UX도 깃허브보다 이쁘다. 소스트리와 연동된다.


다음에는 Git 명령어 정리를 해야겠다.