리눅스 개발자 중에 한 명인 리누스 토르발스는 2005년 Git(정보버전관리자)을 세상에 처음 소개하며 "The Information manager From Hell"라고 하였다. 생각해보자. 26년동안 약 1만명의 엔지니어가 2천만줄이 넘는 소스코드를 작성했다고 한다. 바로 소스코드가 거처를 삼은 곳이 '리눅스'이다. 토르발츠는 수많은 소스코드들의 관리를 위해서 git을 만들었다. git에는 3가지 큰 포인트가 있는데, 코린이에게 이 세가지 포인트는 git에 대한 큰 그림을 잡기에 좋은 핵심요소들이 될 것이다.
git에 대해서 조금 사전에 공부하고 정리하는 입장에서 볼 때, git은 정말 엄청난 것이었다. 12년동안 신학관련레포트들을 생성하면서, 파일하나 만으로 기록했던 시절이 있었다. 글을 쓰다보니 어제 기록했던 글이 이상한 부분이 있어서 어제 부분을 쏵 지우고, 새롭게 그 위에 기록했다. 그리고 저장을 해버렸다. 그 순간 지워진 부분에서 기록했던 너무나 멋있는 문구가 있었는데 되살리지 못하는 상황이 되었을 때, 슬펐다. 그 후로는 파일을 ver1, ver2 등으로 복제하여 기록한 부분이 기억이 있다.
코드를 기록하는 부분에 있어서 git은 작게 보면, 이렇게 생성된 수많은 ver1, ver2, ver3 등을 생성함으로 프로젝트의 안전한 진행을 돕는다. 그러나 정말 단순하게 새로 생성한 버전만 관리했다면 git이 오늘날 개발자 세계에서 살아남지는 못했을 것이다. git을 사용하다보면 이러한 관리까지도 가능하다.
대표적으로 git은 ver1과 ver2 사이의 상관관계를 가시적으로 보여준다. ver2가 ver1에서 추가된 내용이 무엇인지, 그리고 삭제된 내용이 있다면 어떤 부분이 삭제 되었는지까지도 git은 보여준다. 여기서 가장 핵심은 ver1과 ver2가 가지고 있는 파일이 동일한 파일이라도, git은 해당 파일의 과거를 추적하여 현재의 상태와 비교해 줌으로, 코드를 관리하고 기록하는 부분에 있어서 효과적인 프로그램이 되었다. 뿐만 아니다. ver1에서 사용했던 파일들을 그룹화 하여 보여주고, ver2에서 파일을 추가하였다면 추가된 파일들을 그룹화 하여 보여준다. 즉 파일의 내용뿐 아니라, 파일의 추가제거 유무까지도 버전별로 확인이 하는하다는 것이다. 그러기에 git은 오늘날 실무에서 필수적으로 사용되는 프로그램 중 하나이다. git에 대해서 하나씩 개념을 정리하며 나아가 보자.
먼저 git은 오리지널, 즉 git 그 자체의 프로그램이 존재한다. 해당 프로그램은 GUI환경에서 다루는 프로그램이 아니라, window의 CMD(명령프롬프트), Mac의 Terminal에서 명령어로 직접 명렁을 선언하며 관리하는 프로그램이다. 오리지널 이외의 git관련 프로그램들은 이 명령 체계를 기반으로 그래픽화 한 프로그램들이다. Edwinstory에서는 이후에 SourceTree로 이를 살펴보고자 한다. 물론 VisualStudioCode에서 git을 다룰 수도 있는데, 이 방법 역시도 Edwinstory의 후속되는 글에서 살펴볼 예정이다.
Git 다운로드 하기
cmd 또는 Terminal에서 git을 제어하는 것은 다소 복잡하고 코린이에게는 어려운 부분이 분명 존재한다. 그러나 개발자들은 이것을 선호하는데, 이유는 쉽게 그래픽화된 프로그램들에서 사용할 수 없는 부분들을, 이 오리지널git은 제어할 수 있기 때문이다.
git을 설치했다면, cmd 또는 Terminal로 들어가서 git을 실행하고자 하는 폴더로 들어간다.
첫째, Working tree 이다. 버전관리가 시작되지 않은 날 것 그대로의 파일들이 놓여 있는 공간 정도로 이해하자.
둘째, Staging Area 이다. 후에 살펴보겠지만 명령어(git add fileName.확장자)어로 버전관리를 시작할 파일들의 목록을 저장소로 보내는 통로 정도로만 이해하자.
셋째, Repository 이다. 통로로 보내진 파일들이 버전관리를 시작하기 위해서는 저장소라는 공간으로 완전히 이주되어야 한다. 즉 통로에서 약간의 승인 절차를 통해서 저장소로 들어가는데, 그 절차는 명령어(git commit -m "버전명")를 통해서 이 과정이 이뤄진다.
git status
git이 현재 실행된 상태인지 질문하는 명령어인데, 아직 우리는 git을 실행하지 않았기 때문에, "Not commits yet"이라는 명령어를 볼 수 있다.
git add NewFile.txt
이제 버전관리를 실행하기 위해서 Working tree 에 있는 파일을 Staging Area 로 보내보자. 방법은 해당 명령어를 통해서 가능하다. "changes to be committed" 를 통해서 버전으로 생성될 파일들의 목록에 NewFile.txt이 포함된 것을 확인 할 수 있을 것이다.
git commit -m "NewFile에 대한 버전명1"
버전관리를 할 사용자가 지정하여 붙이는 "NewFile에 대한 버전명1"을 기록하면, Staging Area 통로에 있던 파일들이 Repository 로 이주하며, git의 버전관리가 시작된 것을 볼 수 있다.
git status
이제는 버전이 생성되었기에, "nothing to commit, working tree Clean", Working tree 가 깨끗하게 비워진 상태인 것을 볼 수 있다. 만약 Staging Area 로 보내지 않은 파일이 있다면, 해당 명령어에서 확인 할 수 있다.
git log
생성된 git의 버전을 확인할 수 있으며, 명령어를 통해서 들어온 공간에서 나갈 때는 Q를 명령어로 입력해야 한다.
위에서 작업했던 nano 애디터파일을 수정해보자.
백업은 내 저장소에만 파일을 관리하는 것이 아니라 복제하여 다른 곳에서 관리하는 것을 말한다. 백업을 하는 이유는 여러가지이나, 이유는 하나이다. 어떤 상화에 의해서 내 저장소가 파괴될 수 있다는 것이다. 백업의 방법에는 추가로 컴퓨터를 구매하는 방법도 있겠지만, 많이 사용되는 방법으로는 백업을 제공해주는 사업자와 계약하는 것이다. 대표적인 사업자가 github이다. git프로그램에서 Publish Repoasitory를 생성함으로 이를 할 수 있으며, 내컴퓨터에 있는 자료들이 Githup에 생성된다. 이를 통해서 (원격저장소에서) 동일하게 생성된 버전들을 동기화 하여 관리할 수 있다.
push는 내컴퓨터저장소에 있는 버전관리 체계를 GitHup.com 에 자료를 동기화하는 과정을 말한다.
PULL은 동기화된 GitHup에서 다른컴퓨터로 자료를 가져오는 행위를 말한다. 이를 통해서 내컴퓨터 저장소에 있던 git 버전관리 체계는 내컴퓨터 저장소를 포함하여 3곳에서 관리할 수 있게 된 것이다.
마치 이렇게 이해되면 되지 않을까? 내용적인 측면보다, 이해의 측면에서 살펴보자. 즉 내게 아이폰/맥북/아이패드가 있다고 하자. 3개의 기계는 동일한 AppleID로 로그인이 되어있고 아이클라우드에 메모장 공유를 허용해놓았다. 그렇다면 3개의 기계 중 한 곳에서 메모를 추가하거나 삭제하거나 수정하면, 다른 2개의 기계에서도 동기화를 통해서 해당 과정의 내용을 공유한다. git의 push와 pull에 대한 이해는 이렇게 여기면 될 것 같다.
PULL을 통해서 동기화된 GitHup의 내용을 다른사용자와 공유하면, 협업이 가능해진다. 코린이 정도에서 이 정도면 될 것이다.
HEAD -> master 은 git에서 관리하는 버전 중에 가장 최후의 값에 할당하는 명시적 표현이다. 여기서 질문이 생긴다. Message2로 돌ㄹ아고 싶다면 어떻게 하면 될까? 여기서 기억할 것이 위에서 말한 id값이다. 돌아가고 싶은 버전의 id값을 복사하고, 해당 화면에서 나가자.(Q 입력)
이와 같은 작업을 통해서 현재와 과거를 오고가는 시스템이 git이다. [
저장소에는 넣고 싶지 않지만, 파일을 따로 보관하고 싶은 별도의 창고를 지칭한다고 알아두자.
버전을 저장할 때, 전체 파일이 아니라 조각으로 분리한 파일의 저장본 정도로 생각하자.
commitId를 보았을 때, 숫자와 문자의 합성어로 상당히 복잡한 구성으로 되어 있는 것을 볼 수 있는데, 이를 간략하게 설정하는 것도 가능하다.
git으로 백업하는 것은 쉽지 않다. 그러나 백업은 언제나 사용자들의 실수를 바로잡을 수 있는 여러번의 기회를 제공해 준다는 점에서 그냥 넘어갈 수 없는 부분이다. 내컴퓨터에서 다루기 어렵다면, 웹드라이버에 업로드 해서라도 반드시 백업하는 것이 추천된다.
이것으로 git에 대한 전판적인 이해를 마치고자 한다. 다음 글은 실제로 git을 사용하기인데, 필자는 이번에 부트캠프에 참여하게 되었고, 해당 부트캠프에서 사용하게 될 SourceTree 프로그램을 통해서 git을 활용하고자 한다. 이후의 글에서는 VisualStudioCode에서 git을 다루는 것까지 살펴보고자 한다.
author. EDWIN
data 23/01/28
영찬님 통해서 깃 공부하고있습니다..!!ㅠㅠ 감사드립니다! 항상 부족함을 느끼네요.. 하하.. 정리 너무 잘하셔서 잘 보고있어요!