git 버전 관리, SourceTree / 생활코딩

라용·2023년 1월 6일
0

깃 버전 관리에 SourceTree 라는 것을 쓰면 편하다고 해서 찾아보니 마침 생활코딩 강의가 있어서 내용을 정리해봤다.


깃을 사용하는 여러 프로그램 중 하나. 깃이 기본적으로 제공한 기능에 더해서 자체적으로 제공하는 기능이 더 있음. 깃 관련해서 가장 권위있는 도구 중 하나다. 소스트리를 이용해서 버전관리 방법 살펴보자.

저장소 생성

저장소, 레파지토리. 프로그래머라서 앱을 두개 만든다면 각 앱들의 데이터가 저장될 폴더 2개가 있다. 그럼 2개의 저장소를 만들어야 한다. 폴더를 하나 만들고 저장소를 등록해본다. 맥에서 new 를 선택, 방금 생성한 디렉토리를 저장소로 지정할 것이므로 Create Local Repository 를 선택한다.

그리고 나서 저장소로 쓸 폴더 선택하고 Create 누른다.

이렇게 소스트리에 등록되고, 해당 폴더가서 숨김파일을 보면 .git 이라는 디렉토리가 보인다. (맥에서 파일이 안보이면 Command + Shift + . ) 앞으로 만들 버전들이 이 곳에 저장된다. 알 필요는 없지만 지우면 안 된다.

버전 생성

해당 폴더에 파일을 하나 만들어 넣고, 소스트리 창에서 해당 디렉토리를 클릭하면 창이 나온다. 해당 파일을 체크하면 하단에 커밋 남기는 창이 생기고 커밋을 남기면 히스토리에 생성된다, 파일을 수정하면 또 언스테이지에 파일이 생기고 스테이징 후 커밋이 가능하다. (윈도우처럼 안의 파일을 보고 싶어서 이것저것 클릭했던 아래처럼 화면이 바뀌었다.)

또 파일 수정하면 히스토리에서 언커밋 채인지를 알려주기도 한다.

화면 뷰는 이 버튼을 눌러서 바꿀 수 있다.

하나의 버전, 여러개의 파일

지금까지는 하나의 버전에 하나의 파일. 원래 버전은 하나의 버전에 여러 파일이 생길 수 있다. 두개의 파일을 함께 스태이징하고 커밋을 한다.

해당 커밋을 누르면 두개의 파일 변화를 확인할 수 있다.

버전 쪼개기

서로 다른 작업을 해서 버전을 쪼개고 싶다면, 스테이징 파일에 해당 파일만 올리고 커밋하면 된다. 스테이지에 올려지지 않는 파일은 그 버전에 들어가지 않는다. 한마디로 따로 따로 스테이지하고 커밋하면 된다.

깃은 수정된 모든 파일을 버전으로 만드는 것이 아니라 선택해서 버전으로 만들 수 있다. 선택하는 행위를 stage에 올린다고 한다. git staging 검색하면 여러 이미지들이 나온다. 깃은 로컬 디렉토리와 깃 디렉토리가 있다. 우리가 실제 작업하는 로컬 디렉토리를 워킹 디렉토리, 그리고 .gin 이란 숨김 파일이 깃 디렉토리다. 커밋 대기상태에 놓이면 staging area 에 올라간 것. 커믹하면 워킹 디렉토리에 있다가, staging area 에 올렸다가 커밋하면 .git 이라는 깃 디렉토리에 버전으로 저장되는 것.

Reset

정보 시스템을 만났을 때 따져보는 것 CRUD, Create 생성하는 것. Read 는 읽는 것. Update 는 수정, Delete 는 삭제. 이 네가지가 핵심 오퍼레인션이다. 여기서 Create 와 Read 는 개중에서 더 중요하다. 읽지 않는데 생성할 필요 없다. CR 이 핵심이다. 지금까지 버전을 생성하고 버전을 보는 것을 해보았다. 수정과 삭제는 구색맞추기로 소개하지만 초심자들은 거의 사용하지 않는다. 언젠가 필요한 순간이 있을 수 있다.

수정할 커밋을 몇개 더 만들어 보고.

m6 으로 돌아가 본다면, 우클릭 하면 Reset ~ 이 있다. 저장소의 상태를 선택한 m6 버전의 상태로 돌리는 것이다. 그 뒤에 따라오는 버전은 삭제 된다.

그럼 안내창이 뜬다. hard 는 위험하지만 가장 강력하게 지우는 것. 오케이하면 해당 버전으로 돌아간다.

과거의 상태로 돌아가는 경우도 있지만, 작업한 것이 잘못되어서 바로 이전 커밋으로 돌아가고 싶을 때 해당 커밋 지점에서 reset 하면 쉽게 해당 지점으로 돌아갈 수 있다. 나중에 협업하면 작업한 것을 인터넷에 올리게 되는데, 이미 올라간 버전은 리셋하면 안된다. 위험성이 있으니 주의해야 한다.

Revert

Reset 은 삭제하는 것, 삭제를 하면 안되는 경우가 있다. 회계에서는 실수조차 지우지 않는다. 잘못된 부분은 표시를 해야 한다.

기존 기록을 훼손하지 않고 돌아가는 기능을 Revert 라고 한다. 소스 트리에서는 revese 라고 명시하며 해당 커밋을 우클릭 하고 reverse commit 을 누르면 된다.

그러면 기존 버전이 사라지지 않고 새로운 버전이 생성되는데 이때 리버스한 m9 내용은 사라지고 이전 버전인 m8 이 남는다.

중요한 것은 만약 m6 으로 리버트하고 싶다면 m6 에서 바로 리버트를 하면 안되고 이런 식으로 위에서 부터 하나씩 타고 내려가야 한다는 것이다.

뭔가 꼬였지만 이런식으로 순서대로 타고 내려와야 한다. 한 단계씩. 기본적으로 리셋을 통해 잘못된 기록을 다지우기 보다는 이런식으로 잘못된 기록까지 남겨서 버전으로 관리하는 것이 좋다.

시간여행

특정한 버전으로 바로 이동하고 싶을 때. 버전관리로 할 수 있다. 리셋은 기록이 다 삭제되어서 약간 위험한 명령, 그냥 더블 클릭하면 해당 버전으로 이동한다. 버전은 삭제되지 않고 남아있다. 최신버전으로 가고 싶다면, 최상단을 클릭하는 것이 아니라 좌측 브랜치 안의 메인을 클릭하면 된다.

해당 위치 커밋을 더블 클릭만해서 이동이 가능하다니 정말 간편하다.
해당 위치에서 수정을 하니 다른 라인이 또 생긴다.

수정한 상태로 커밋 안하고 메인 이동이 안되어서 커밋을 하니 이렇게 새로운 커밋이 최상단으로 올라간다. 그런데 다시 main 으로 이동하니 change 커밋은 사라진다.

각가의 버전은 커밋이라고도 부른다. 각 커밋은 고유한 식별자를 가진다. 7글자 정도만 보여준다. 커밋 아이디 샤? 등으로 부르는데 우클릭해서 Copy SHA-1 to Clipboard 누르면 복사된다.

수업을 마치며

버전관리의 핵심은 비교, 비교를 통해서 과거로 되돌아갈 수 있다는 것이 핵심. diff tool 사용해서 차이점을 더 정교하게 비교해보라. 버전 관리하지 말아야 할 파일이라면 .gitignore 파일 만들고, 거기에 이름을 넣어두면 된다. 나 혼자 보기 위해서 저장하는 정보들. 버전관리에서 무시하고 싶은 파일들 넣어둔다. branch 라는 특징. 평행우주처럼 우리 저장소를 여러상태로 공존하게 해준다. 보고서를 작성했는데, 그 보고서를 기반으로 고객사별로 조금씩 다른 버전으로 수정해서 제공하고 싶다면? 저장소 전체를 복사해서 각각의 디렉토리를 만들 필요 없다. 하나의 저장소에서 다양한 작업이 가능한 게 branch 다. 각각 커밋 식별자로 커밋 아이디가 쓰인다. 기억하기 쉽지 않으니까. tag 를 이용하면 버전의 커밋 아이디 뿐만 아니라 이해하기 쉬운 이름을 붙여서 그 이름으로 쉽게 버전을 찾아갈 수 있다. 백업도 중요하다. 백업 하지 않으면 정보는 언젠가 유실된다. 깃은 매우 안전한 백업 장치다. 클릭 한번으로 인터넷에 업로드해서 백업 가능하다. 백업 하게 되면 백업 너머의 협업이라는 기능이 보일 것이다.

profile
Today I Learned

0개의 댓글