본문 바로가기

Git

SourceTree 소스트리 사용법_(수정: 2023.11.10)

필요한것 : GIT + SourceTree (유틸리티)

1. 깃허브 회원가입 + 인증까지 완료

2. 소스트리 설치

 


2023.05.24 - 1차 수정 / 설명 수정 및 추가

2023.07.12 - 2차 수정 / 병합 충돌 설명 수정

2023.10.19 - 3차 수정 / 설명 수정

2023.11.10 - 4차 수정 / 이미지 교체

2024.12.09 - FORK 추천글 추가

-> 소스트리 같은 git GUI 인 fork 도 한번 구경해보세요.

    (https://seo-developer.tistory.com/95?category=1094813)


 

SourceTree 의 중요한 개념에 대해서 먼저 설명하자면

 

0. SourceTree 는 나무라고 생각하자.

- https://www.sourcetreeapp.com/

- 사용자와 컴퓨터의 소통(Interface)을 위한 대표적인 입력 방법은 CLI 와 GUI

- CLI 는 Command Line Interface, 터미널처럼 한 줄 한줄 직접 명령을 전달하는 방식

- GUI 는 Grapic USer Interface, 그래픽(버튼 등의 UI)을 통해 컴퓨터에 명령을 전달하는 방식

- 소스트리는 Git GUI 인터페이스 입니다.

 

(1). master

- 사용자가 보고있는 최종버전

- 실제로 서비스되고 있는 상태

- 개발시 배포 전까지 건들일 필요 없음 ★

(2). develop

- 개발자가 개발하고 있는 상태

- 기능이 추가되거나 수정되고있는 일종의 테스트서버

- 실제로 사용하고 있는 공간

(3). branch

- 각각의 개발이 진행되고 있는 ★가지, 정말 말 그대로 가지의 역할

- 개발중인 기능의 추가 및 수정등의 변경이 있을 경우. 가지에 작업물을 커밋(저장)하여 디벨롭에 전달

- 개념만 설명하고. 상세 설명은 하단에 이어서 하겠습니다.

 

 

 

 

 

 

 

1. master

- 딱 봤을때 보여지는 나무

- 게임으로 예를 들면, 실제로 서비스 하고있는 상태.

- 최종의 최종버전 이라고 생각하면 된다.

 

1-1. origin

- 현재 시점. 소스트리는 현재 어느 시점에 있는지가 중요하다.

- 시점을 엉망으로 만들면 파일을 올릴수도, 내려받을 수도 없다.

 

 

 

2. develop

- 실질적으로 개발자가 사용하고 있는 핵심. 나무의 줄기 (제일 굵은 메인)

- 사용자는 볼 수 없지만 개발자들은 이곳에서 개발을 진행한다.

- 여기에 잔가지(branch) 를 걸어서 사용함.

 

 

 

3. branch

- 개발중인 공간. 나무의 가지

 

- ★브런치를 사용해야 하는 이유★

   1). 협업시 용이하게 사용됨

         - 예를 들어 AB가 각각 사과와 귤을 5개씩 따와야 하는 상황

         - ① A(사과: 0, 귤: 0), B(사과: 0, 귤: 0)

 

         - A의 경우만 먼저 살펴보자면

         - ① A(사과: 0, 귤: 0)

         - A(사과: 3, 귤: 0)

         - A(사과: 5, 귤: 0) / 임무 완료

         - ④ 완료된 임무 상태를 디벨롭에 전달 ~ 디벨롭(사과: 0, 귤: 0)  -> (사과:  5 , 귤: 0)

 

         - B의 경우를 살펴보면

         - ① B(사과: 0, 귤: 0)

         -  B(사과: 0, 귤: 3)

         -  B(사과: 0, 귤: 5) / 임무 완료

         - 완료된 임무 상태를 디벨롭에 전달,

             


- 나를 힘들게 하는 ★병합 충돌★의 큰 원인은

 

  1). 한개의 파일로 두 사람 이상이 작업한 경우

 

       - 위 브랜치에서 설명했던 사과의 예시에서, A 브랜치의 처음 시작 상태(①)는 사과:0, 귤:0 이다.

          작업을 진행하여 A브랜치의 ③번처럼 사과: 5, 귤:0 개가 되어

          푸쉬 및 디벨롭에 머지 요청까지 한 시점이라고 가정하자.

 

       - 이 시점에서 B브랜치는 ②번 시점의 사과:0, 귤:3 일때. 

         ④ 번의 디벨롭 최신 상태를 먼저 내려받아야 충돌이 발생하지 않음.

 

       - 주의할 점은. 이미 B브랜치 작업 상태가 사과:0, 귤:3 일 경우.

         커밋 안하고 디벨롭의 최신 상태 사과: 5, 귤:0 를 받았다간 내 코드 사과:0, 귤:3 가 원귀됨/ 코드 날아감

         내 작업물 백업용 가지를 따로 빼서 커밋을 꼮꼮꼮 먼저 합시다.


       - 내가 사용하는 방법은...

       - 다른 개발자의 작업 내용을 아는 경우엔 병합충돌 옵션에서 알아서 체크

       - 다른 개발자의 작업 내용을 모르는는 경우엔 병합충돌 옵션에서

             (1). 상대방 코드를 우선 수락

             (2). 내 코드 중 수정된내용이 있는지 확인

             (3). 햇갈리면 내 코드 따로 백업하고 다른 작업자와 대화 후 충돌 해결

 

         0). 내 파일을 내 브랜치에 커밋 및 푸쉬

         1). 디벨롭으로 체크아웃 (커밋 안하면 체크아웃 안됨)

 

         2). 디벨롭 최신 상태 내려받기(pull)

         3). 최신 상태의 파일에 백업된 내 코드를 붙여넣기

         4). 커밋 및 푸쉬, 머지 요청

 

       - 처음에 충돌 내도 괜찮으니까 꼭 물어보고 소통하기.  내 작업내용 공유하기.   버전 바꿔야 하면 꼭 상의하기.


 

         - 요약하면. 브런치에 작업물을 커밋 및 푸쉬(원격 저장소로 전달)한 뒤,

           디벨롭에 머지_병합(원격 저장소로 전달한 내 작업물을 디벨롭 상태의 작업물과 합치기)하는 방식으로 사용됨

         - 여러명의 작업이 엉키지 않는다!

 

   2). 또한 버전 관리에 용이한데,

        ②번의 경우 처럼 사과가 3개만 필요한 경우. 해당 시점으로 작업을 돌려서

        커밋, 푸쉬, 머지 하면 작업했던 내용을 반복하지 않아도 된다!

 

- 따라서 브런치에서 작업이 완료될 때 마다 해당 가지에 커밋을 걸어야 한다.

 

 

 

3-1. commit

- 브랜치에 내 파일을 올리는 기능

- 커밋을 할 때 스테이지가 존재하는데. 내 PC, 로컬에만 존재할때는 스테이지 밖이고.

  소스 트리에 올리면 스테이지 안에 넣은것(아직 로컬 안임)

- 만약 엉뚱한 것을 커밋했더라도, 아직 push 전이면 내 로컬에만 존재하므로 당황하지 말고 취소하면 된다.

커밋을 취소하고 싶은 시점에서 "브랜치 초기화"

 

 

 

 

4. push

- 커밋까지 진행된 시점을 기준으로, 업로드한 내 파일을 실질적으로 원격 저장소에 올리는 기능

- 위에 오리진 설명을 하면서. 시점이 엉망이 되면 push 시에 오류가 뜬다.

  1). 오리진(현 시점) 문제

       - 차라리 로컬에 저장된 폴더 째로 지우고(내 코드는 따로 백업) 새로 clone 받아서 최신 상태를 내려받은 뒤

         디벨롭에서 새 브랜치를 뽑아서 사용하는걸 추천합니다.

 

 

 

5. merge

- push 된 내용이 담긴 브랜치와 디벨롭 가지를 합치는 기능

- 왜? 합쳐야 하냐면.... 내 작업물과 다른 사람의 작업물을.. 합쳐야 하니까... 그것이 협업이니까 ,.,.,ㅁ8

- 내 가지에서 디벨롭을 오른쪽 클릭하여 fetct develop (최신상태 업데이트)한 뒤 현재 브랜치로 develop 병합

- 병합 후 git 에서 머지 리퀘스트 날리면 git 관리자가 확인 후 병합을 수락하거나 거절 할 수 있다.

 

 

 

6. pull

- 내려 받는 기능.


정리

1), 마스터에서 디벨롭 가지를 따로 뽑는다.

2). 실질적으로 개발이 진행되는 공간

3). 필요한 기능에 맞춰 각각의 브런치를 뽑는다.

4, 5). 개발이 진행되면 내 브런치에 작업물을 커밋 및 push 하여 원격 저장소에 저장한다.

6). 디벨롭에 머지, 깃 관리자에게 머지 리퀘스트

7). 전체 개발이 끝나면 마스터에 배포

8). 배포된 최종상태

 

 

 


주의사항

0. 패치(최신화, 로컬이랑 동기화) 꾸준히 하기

1.develop 이랑 함부로 병합하지 말지

- 내 브랜치에 push 하고, 병합은 GIT LAP에 병합 요청을 넣는 방식으로 .. (뭔가 유실될수도 있다)

- 디벨롭에서 가져와서 내 로컬로 병합은 OK, 반대는 XX (위치: 내 브랜치 - 디벨롭을 오른쪽 클릭해서 병합)

2. 내 브랜치 계속 쓰기. 충돌나면 문제있는것

'Git' 카테고리의 다른 글

Fork 포크 사용법  (0) 2024.11.07
GitLab, SourceTree 초기 세팅_(수정: 2023.07.12)  (0) 2023.03.20