개발 환경 관련

[sourcetree] 소스트리 기본 사용법, 보는 법

Emil :) 2020. 11. 26. 09:48
728x90
반응형

목차

본문내용

개요


소스트리는 github desktop과 더불어 많은 사람들이 사용중인 git gui로, git 관련된 작업을 보기 편한 UI로 제공한다는 장점이 있습니다.

그러나, 실제로 규모가 크고, 많은 사람들이 작업하는 경우, 그래프가 처음엔 이해하기 굉장히 힘들게 표현되어 있습니다.

제 개인적인 프로젝트의 git 현황입니다. 여러 사람이 작업하다보면 branch가 많이 갈리는데, 이처럼 보기 불편한 상황이 많이 연출됩니다.

따라서, 이 가이드는 소스트리를 처음 써보시는 분들을 위해 최대한 빨리 적응할 수 있도록 기본적인 부분만 빠르게 알려드리도록 하겠습니다.

진행 과정


기본적인 소스트리 보는 법


먼저, 아무것도 없는 프로젝트인 테스트 프로젝트를 만들었습니다. 본인이 작업하시는 프로젝트와 비교하시면서 이해하시면 이해가 훨씬 쉬우실겁니다.

브랜치는
master - 실제 내가 최종적으로 사용하는 브랜치
develop - master에 넣기 전 브랜치, 개발단계에서 어느정도 검증이 된 코드들
feature/develop - 실제로 개발을 진행하는 브랜치

로 구성됩니다.

feature/develop 부터 천천히 단계를 올라가면서 살펴보도록 하겠습니다.

1,2,3번 파일이 있습니다. 1번 파일을 작업하고, 커밋한다고 가정합시다. 각각 내용은
"1번 파일입니다." "2번 파일입니다" "3번 파일입니다"
라고 작성되어있습니다.

변경 사항이 생기면 좌상단의 commit을 누르면, 하단에 다음과 같이 뜹니다. stage로 올려줍니다.

하단의 커밋 메세지에 날짜_ 작업내용 형태로 적고, 커밋해줍니다. 이제 2번파일을 마찬가지로 커밋해주도록 합니다.

그럼 다음과 같이 뜰텐데, 여기서 중요합니다.
초록색은 현재 작업중인 브랜치를
빨간색은 push할 커밋 수를, 즉 해당 라인을 포함한 2번째 아래의 점까지 push하겠다는 내용입니다.
push를 눌러 push해주도록 합시다.

Merge와 Cheerypick


여기까지 진행하면, 원격저장소의 feature/develop까지 적용이 된 상태입니다.
이제 여기서 feature/develop이 아닌 develop으로 해당 커밋을 옮겨주려면 develop브랜치로 이동해야합니다.
아래 사진과 같이 하얀 빈 원이 develop으로 옮겨간 것을 볼 수 있습니다.

여기서 두가지를 알아두셔야 합니다.
merge와 cherrypick으로, merge는 커밋된 사항들 '전부' 를 합치는것이고 cheerypick은 원하는 커밋 사항만 가져오는 것입니다.

현재 1번 커밋과 2번 커밋이 있는데 (밑에 first commit은 무시하시면됩니다) 둘 다 가져오고 싶다면 가장 최상단 브랜치 커밋 내역 우클릭 - merge, 원하는 것만 가져오고싶다면 cherrypick을 사용하시면 됩니다. cherrypick은 후술할 것이므로 merge 해보도록 하겠습니다.

그럼 이렇게 "feature/develop"의 변경사항을 현재 브랜치인 "develop"에 merge 하겠냐는 문구가 뜨고, 확인 눌러주시면 develop도 feature/develop과 마찬가지인 상황이됩니다.

그렇다면, 이제 cherrypick을 해보도록 하겠습니다. 이런 상황은 다음과 같은 상황일 때 많이 발생합니다.

  1. A 작업, B작업, C작업을 진행중
  2. A,B 작업만이 master 브랜치에 올라가야됨
  3. C작업은 테스트 중
  4. 그러나 develop 브랜치엔 A, B, C작업 모두 commit된 상태

이런 상황이라면, A와 B작업만이 master 브랜치에 올라가야 합니다. 이 상황에서 merge 를 해버리면 의도하지 않은 C작업까지 master브랜치에 올라가게 되므로, 업무에 차질이 생길 수 있습니다. 겜터짐 ㅅㄱ

이해를 돕기위해 3번 파일도 커밋하도록 하겠습니다. 이후, master브랜치로 전환했습니다.

현재 다음과 같은 상황입니다. 1, 2번 파일만 master에 적용시키려고합니다.

이 때 이렇게 merge를 하게되면 1, 2, 3번 파일 모두 적용이 되버립니다.
develop에는 1, 2, 3 번을 수정한 내역이 모두 들어가있으니까요.

이렇게 우클릭 - cheerypick을 하시면해당 커밋만 가져오게 됩니다.
commit immediately~~ 를 체크해제 하셔야 여러개의 커밋, 1개의 푸시가 가능합니다. 체크 하시면 이 커밋 1개당 푸시를 계속 합니다.

이렇게 1, 2번 커밋을 가져오면 다음과 같이 커밋 리스트에 쌓이게 됩니다.
이 친구를 커밋하고, 푸시해주면 master엔 다음과 같이 적용됩니다.

여기서 주목하셔야 될 점은, 새로운 그래프가 생겨났습니다.
이 그래프는 하위 브랜치의 내용이 상위 브랜치에 적용되었을 때 갈라지게 됩니다.
현재 분홍색그래프는 feature/develop 과 develop 둘 다를 나타내고 있습니다.

여기서 브랜치를 변경하면, 가장 왼쪽에 있는 브랜치의 기준이 변경되는 방식입니다.
현재는 master브랜치인데, feature/develop으로 변경하면 다음과 같이 변합니다.

그렇다면 이 상황에서, develop에 있는 아까 합치지 않은 3번 파일을 cherrypick 하게되면...
다음과 같이 에러가 납니다. master와 develop의 내용이 다르기 때문에, merge conflict 에러가 발생한 것입니다.

이럴 때는 직접 변경하고자 하는 내용으로 수정해준 뒤에, 다시 cherrypick 하시면 문제없이 commit과 push가 가능합니다.

그렇다면 이런식으로 계속 그래프가 새롭게 뻗어나가는 방식입니다.

하위 그래프와 상위 그래프가 완전히 똑같아지지 않는 이상 그래프는 하나로 합쳐지지 않는다는 점을 염두에 두고 진행하시면 이해하시기가 좀 쉬울 것입니다.

앞에선 생략했지만 저기 있는 "201125_git 가이드 예제 새로운 커밋"엔 2번파일을 추가로 또 수정했기 때문에 하나로 합쳐지지 않는 것입니다.

결과


소스트리를 저도 처음써봐서 좀 두서없이 작성하긴했습니다만, 저도 처음 봤을 땐 진짜 이게 뭔가 싶더라구요.

그래도 이 포스팅으로 처음보단 나아졌기를 바랍니다.

 

구독 및 하트는 정보 포스팅 제작에 큰 힘이됩니다♡

728x90
반응형