Engineering/Software Engineering

[Software Engineering] Git의 개념과 기초 사용법

MB Brad KWON 2013. 6. 1. 13:55

SVN & Git.pdf


The concept of Git.pdf




 위의 자료를 이용하여 Git에 관하여 공부하자!! SVN은 보통 저장소가 서버에 존재하게 된다. Git은 저장소가 내 컴퓨터에 존재한다. 그렇기 때문에 속도가 빠르다. 그리고 다른 사람과의 작업을 원한다면 내 컴퓨터의 저장소를 원격 저장소에 연결하면 된다. Commit은 내 컴퓨터의 저장소에 작업 내용을 올리는 것이고 원격 저장소에 작업 내용을 올리는 것은 Push라고 한다. 결과적으로 Git은 밑의 그림처럼 보여진다.





 위와 같은 구조로 인하여 Git이 갖는 장점은 무엇보다 빠르다는 것이다. Commit을 로컬 저장소에 하기 때문에 네트워크를 거치지 않고 당연히 빠를 수 밖에 없다. 네트워크가 불가한 상황에서도 작업을 계속할 수 있다. 로컬 저장소를 이용하기 때문이다.





 또 하나 알아두어야 할 것은 Stage(index라고도 부름)라고 부르는 영역이다. 이는 로컬 저장소에 Commit하기 전에 거치는 또 하나의 영역이다. Commit할 파일들은 먼저 Stage에 추가된다. Stage를 이용함으로써 SVN과 다르게 수정된 파일을 모두 Commit해야하는 상황을 피할 수 있다. Stage에 추가한 다음에 Commit하는 방식이 번거롭다면 


git commit -a


 위의 명령어를 이용해서 한번에 처리할 수 있다. Commit한 파일을 원격저장소에 Push하기 위해서 아래의 명령어를 사용한다.


git push


 지금까지 알아본 내용을 모두 정리하면 밑에와 같은 그림이 그려지게 된다.





 내 작업들이 오류가 발생 했을 때는 Pull을 이용하여 다른 사람들이 한 작업을 내려 받으면 된다. 원격 저장소에서 로컬 저장소로 내려받는 것은 Fetch라고 하고 내려받은 데이터를 병합하는 것은 Merge라고 한다. 그리고 위의 둘을 모두 하는 것은 Pull이다. 





 위에 설명한 Git의 기능 외에 특별한 기능들에 대해서도 알아보도록 하자. 먼저 Snapshot이다. Snapshot는 git에서 각 버전을 저장하는 기능이다. SVN은 각 버전의 차이점을 기록하지만 Git은 각 버전 자체를 저장한다. SVN은 새로운 버전을 받을 때, 파일과 각 버전의 변경내역을 다운로드 받게 된다. 하지만 Git은 해당 버전 자체만을 다운로드 하기 때문에 느리지 않다. 또한 로컬 저장소에서 받기 때문에 네트워크가 불가한 상황에서도 받을 수 있다.


 다음으로 알아볼 기능은 Branch이다. SVN에서 제공하는 Branch는 아래와 같은 디렉토리 구조이다. 파일 전체의 변경 내역만을 다른 디렉토리에 복사해 놓는다. 이는 Branch를 내려 받을 때, 변경내역을 순차적으로 적용하여 실제 파일을 만든 후에 네트워크를 통해 다운로드함으로써 느리고 부담스럽다.





 하지만 Git은 연속적으로 Snapshot이 순차적으로 이어지다가 Branch를 만들어서 관리한다. 참고로 Checkout은 SVN에서 작업 내용을 다운로드하는 기능이지만 Git에서는 Branch를 선택하는 기능입니다.





 다음 설명할 기능은 Rebase이다. Rebase는 Merge와 비슷한 기능이다. Master와 Branch를 통합하는 기능이다. 차이점은  Merge는 2개의 Branch와 2개의 Branch의 조상을 병합하는 3-Way-Merge를 실행한다. Rebase는 Master와 하나의 Branch를 병합하고 순차적으로 다른 Branch를 병합하여  히스토리를 상대적으로 깔끔하게 유지해준다. 밑의 그림으로 비교를 해보자.





 마지막으로 설명할 기능은 Tag이다. Tag는 SVN과 마찬가지로 각기 다른 Revision을 하나의 통합된 Version으로 저장하는 것으로 명령어를 통하여 지원하고 있다.



 이로서 Git의 기본적인 기능과 개념들을 익혔다. 이제 Git을 직접 설치하고 사용해보자. Git은 공개소프트웨어 개발에서 무지무지무지무지하게 널~~~~~~리 사용되고 있다. 그래서 사용법을 익혀둔다면 유익한 도구이다. 밑에 Git의 명령어들과 참고 사이트들을 기록한다. 



Git 공식 사이트 : http://git-scm.com/


Git 간편안내 : http://rogerdudler.github.com/git-guide/index.ko.html


Git Hub : https://github.com/