팀 개발을 위한 Git, GitHub 시작하기 - 1, 2, 3

CHAPTER 1 : GUI를 위한 버전 관리 환경 구축하기

🖊01.소스트리 설치하기

🖊03.GitHub 둘러보기

CHAPTER 2 : 혼자서 Git 으로 버전 관리하기

🖊01.로컬저장소를 소스트리에 불러오기

🖊02.소스트리로 커밋 만들고 푸시하기

- git remote add origin 주소 </pre>

- 라는 명령어를 입력했었다. 만약 origin 에 myOrigin 으로 입력했었더라면, origin/master > myOrigin/master 였을것이다.
- origin 이라는 꼬리표는 원격저장소의 현재버전상태를 가리킨다.
- master 이란 우리가 커밋을 올리는 '줄기'의 이름이다. 따로 줄기를 생성하지 않으면 Git 은 master 이라는 기본줄기에 커밋을 올린다.
- 새로만든 커밋을 원격저장소로 업로드 할때는 푸시를 해준다. 이 동작은 밑의 코드와 같다.

- git push origin master </pre>




**🖊03. 그림으로 Git 뜯어보기**

- 커밋은 Subversion - 델타(차이점만 저장)이 아닌 Git - 스냅샷(전체를 저장)!


## CHAPTER 3 : 여러 명이 함께 Git 으로 협업하기

**🖊01.원격저장소에서 협업하기:브랜치(Branch)**

- 두명 이상이 동시에 버전관리를 할때에도 서로의 작업물에 의존하지 않고 본인이 원할때 코드를 올리고, 또 본인이 원할때 협업자와 코드를 합칠 수 있다.
- 커밋은 줄줄이 기차처럼 연결되어있는데, 두명이 협업하게 되면 한 줄기가 두 줄로 갈래가 나뉘게 된다.
- 이렇게 특정기준에서 줄기를 나누어 작업할 수 있는 기능을 **브랜치**라고한다.
- master : git 이 제공하는 기본 브랜치
- 새 브랜치를 만들고 커밋을 하면 master 와 새 브랜치는 가리키는 커밋이 다르게 된다.
- 그 둘 사이를 넘나드는 방법은  HEAD

**🖊02.브랜치 실습 기본:만들고, 이동한다**



- 이름에 / 를 넣으면 'feature' 가 마치 폴더처럼 구분된다.(소스트리의 편의기능)
- 이후에 커밋을 하고 현재 브랜치 까지 푸시한다
> 이때 나는 에러가 났는데, 터미널을 통해 해결하였다

git push origin 브랜치이름</pre>

- **브랜치를 만들때는 base 브랜치를 잘 설정해야한다**
- 잘못 만들면 수정본 까지 같이 만들어진다..
- 브랜치를 이동하는 명령어는 checkout 하거나 브랜치 이름을 더블클릭해도 된다.

**🖊03.브랜치와 브랜치를 합치기:병합(merge, 머지)**

- 병합은 병합커밋(merge commit), 빨리감기 병합(fast-forward), 충돌상태(conflict) 
- 각각의 다른상태가 겹치지 않아서 합치면 끝나는 > 병합커밋
- 앞은 기존 상태, 뒤는 달라진 상태, 즉 뒤에 상태로 그대로 가면 되는 > 빨리감기 병합
- 앞과 뒤가 다르게 겹쳐지는 상태 > 충돌 상태



- master 브랜치로 checkout 후 병합하고싶은 커밋에서 오른쪽을 눌러 병합하기를 눌러준다.(좌측 사이드바에서도 가능)
- 이후 원격저장소로 push 해준다.

**🖊04.앗!둘이 똑같은 코드를 고쳤어요:충돌(conflict)해결하기**

- 병합할때 충돌이 났을때, 팝업창을 끄고 '커밋하지 않은 변경사항' 을 눌러보면 어느파일에서 충돌이 생겼는지를 알 수 있다.
- vs코드로 돌아가서 그 파일을 살피게 되면 이와같은 코드를 볼 수 있다.



- 6라인 '======'을 기준으로 위가 베이스브랜치(ex feature/cart) 밑이 병합의 대상 브랜치(ex master)
- 이후 수동으로 수정한 뒤 (HEAD 이런내용들 지워도 됨) 스테이지에 올리면 충돌하지 않는것을 확인 할 수 있다.
- 이와 관련된 커밋메세지가 영문으로 남겨져 있을 것인데, 여기서는 그 메세지를 냅두고 커밋!
- 이후 원격저장소에 push > master checkout > 최신 커밋인 'Merge branc...' 에 병합하면 master 브랜치 포인터가 최신커밋인 'Merge branc...' 를 가리키는것을 확인 할 수있다.
- 이후 master도 원격저장소에 push!

**🖊05.브랜치를 합치는 예의바른 방법:풀 리퀘스트**

- 이 전과 같이 브랜치를 추가하고 커밋하고, 원격저장소에 push하게 되면, GitHub 에서 초록색버튼(compare..)을 가진 노란색 음영을 만날 수 있다. 
- 초록 버튼을 누르게 되면 밑에와 같은 창이 뜬다.



- 풀 리퀘스트 : 정중하게 병합을 요청할 수 있는 메세지를 적을 수 있는 페이지.
- 여기서 설정할 것은 베이스브랜치, 비교브랜치.
- 베이스브랜치는 병합결과물이 올라갈, 기준이 되는 브랜치.
- 비교브랜치는 현재 기준 브랜치의 비교대상이 되는 브랜치.

1. 병합된 커밋이 들어갈 브랜치를 정하는 선택박스
2. 병합의 대상이 될, 즉 베이스브랜치에 반영시키고 싶은 브랜치
3. 베이스브랜치와 비교브랜치가 충돌 없이 병합될 수 있다는 뜻. GitHub에서 자동으로 계산. 만약 충돌나면 빨간색으로 conflict 이라고 알려줌.
4. 동료개발자가 한눈에 이해하기 쉬운 제목을 적어야 함.
5. 동료개발자가 코드를 이해하는데 도움이 되는 설명을 적어줌. (스크린샷을 첨부하거나 테스트방법 적으면 좋음)
6. 저장소의 협력자가 여러명이라면 몇명을 콕 찝어서 검토요청할 수 있음. 보통 같은 팀원이나 해당 기능과 연관된 동료
7. 이 풀 리퀘스트를 담당하는 동료를 적음. 보통 자기자신
8. 이 풀 리퀘스트에 대한 라벨을 달아줌. ex [버그], [프론트엔드], [리뷰필요], [백엔드] ...



- 위의 버튼을 누르면 밑에와 같은 병합할 수 있는 버튼이 보인다.



- 이렇게 GitHub 에서도 병합을 할 수 있다.



- 닫혀진 풀리퀘스트는 탭에 closed 에서 볼 수 있다.



- 이후 소스트리에서는 마스터가 예전커밋을 가리키고 있는것을 볼 수있는데, 이때 패치(모든 원격저장소에서 가져오기 체크)를 눌러주면 해결 된다.
- 다시 마스터에서 checkout 을 해주고, pull 아이콘 클릭하면 끝!

**🖊06.개발이 완료되었습니다,출시하자!:릴리즈(release)**

- 프로그램을 출시하는것을 릴리즈라고한다.
- 병합을 마친 브랜치를 서버에 올려서 사용자들이 쓸 수 있게 배포하고, 현재 코드상태를 버전 'v1.0.0'이라고 기록 > 태그를 통해!



- 이후 푸시를 하면 GitHub release 탭에서 확인 가능 

> 이때 나는 푸시가 안되서 터미널을 이용하였다.
먼저 태그가 있는지 확인을 해야할 것 같아서
git show 태그이름
을 검색했더니 태그가 확인되었고, 태그를 push 해 주었다.
git push origin 태그이름
 </pre>