Git_ Git workflow

Adela·2020년 4월 27일

Git

목록 보기
4/4
post-thumbnail

Git workflow

협업을 위한 git-flow에 대해 배웠다.

상대의 코드를 먼저 내 로컬로 가져오고, 충돌이 있다면 수정 후에 다시 작업 레포지토리에 업로드 하면서 페어와 함께 작업 중인 코드를 최신화할 수 있게 해주는 작업형식이다.

git clone 명령으로 fork를 완료한 디렉토리 내에서

$ git remote add pair 상대방Repo URL
$ git remote -v

페어의 저장소와 나의 저장소간에 git pull명령어로 최신 수정한 코드를 주고받는 것이 가능해진다.

branch

분리된 작업 영역.

현재 작업 공간을 기준으로 가지가 만들어진다. 나뭇가지처럼
따라서 현재 작업하고 있는 공간이 어딘지, 내가 현재 어떤 branch에서 작업하고 있는지 확인해야 한다.

이것은 git branch명령어로 확인할 수 있다.

  • branch 장점:
    사본개념이기 때문에 branch에서 어떠한 수정을 해도 merge하기 전까지는 원본에 영향을 주지 않는다.

각각의 branch끼리도 서로 영향을 주지 않는다.

명령어

Q. 현재 내가 작업하고 있는 branch에서 다른 브랜치로 옮기고 싶다면?
$ git checkout {옮겨가고 싶은 브랜치 이름} 명령어

Q. 새로운 브랜치를 생성하고 + 거기로 이동하고 싶다면?
위의 명령어에서 -b옵션 추가
$ git checkout -b {만들고 싶은 브랜치 이름}

Q. 원본을 베이스로하는 다른 브랜치를 다시 만들고 싶다면?
1. 베이스(원본)로 하고 싶은 브랜치로 작업공간 옮기기
$ git checkout {원본 브랜치 이름}
2. 새로운 브랜치 생성 후 거기로 이동
$ git checkout -b 만들 브랜치 이름

헷갈릴 때에는 그림을 그려보면서 현재 내가 어떤 공간에서 작업 중인지 확인하면 좋다.

필요한 이유

예시) 팀으로 프로젝트를 진행할 때

카페를 추천해주는 App 개발 프로젝트
A : 메인화면에서 카페를 검색하는 기능을 만들게.
B : 메인화면을 꾸밀게.
C : 메인화면에 있는 지도위에 카페를 표시하는 기능을 만들게.
D : 로딩 화면을 만들게.

이런 경우 메인화면 하나의 파일을 A,B,C가 함께 조작하게 되면 위험하다.
원본을 갖고 새로운 기능을 개발할 때 원본에 영향을 주지 않고 다양한 시도를 할 수 있기 때문에 branch는 필수인 것 같다.

각자 복사본으로 자신의 작업대를 가져서 각자 작업한 후에 합치면 된다.

각자의 작업을 하나로 합치는 workflow

프로젝트의 master repo (= upstream) 에서 fork로 나의 repo에 복사해 온다.
clone명령으로 local로 프로젝트를 가져온다. >>여기까지는 보통 과제수행 시에 많이 했던 것

이후 local과 master repo를 연결하는 작업이 필요하다.
왜?
한 프로젝트는 여러명이서 계속 작업하기 때문에 master는 계속 업데이트될 것이고,
그럼 나의repo에 fork한 소스는 fork 시점에 멈춰있게 된다.
예전에 fork한 소스를 발전시켜 pull request하게 되면 conflict가 발생하게 되는데,
기존 repo를 날리고 master repo를 새로 fork해도 되긴 하지만, 작업 히스토리도 함께 잃게 될 것이다.

local에서 할 작업은 master의 원본에다가 새로운 기능을 만드는 것이기 때문에
따라서 local에 해당 branch를 최신화해서 작업해야 한다. (fork한 master의 소스와 싱크를 맞추어야 함)

fork한 local에 remote로 master repo를 등록
등록하기 전에 현재 원격저장소가 무엇이 있는지 $ git remote -v로 확인할 수 있다.

upstream 등록

$ git remote add upstream 마스터Repo의 URL
master repo에 upstream이라는 이름을 준 것이고 이름은 아무거나해도 괜찮다.
=> 다시 등록된 master repo확인 $ git remote -v

동기화

  • $ git pull upstream로 master의 해당원본소스를 local로 땡겨온다.
    pull과 fetch의 차이 : pull은 가져와서 merge까지 자동으로 해주고, fetch는 merge해주지 않음
    fetch를 한 경우에는 내려받은 소스코드를 실제 나의repo에 $ git merge upstream/master로 merge 시켜줘야한다.
    잘 진행되면 정상적으로 upstream이라는 저장소의 master branch를 가져온 것이다.
  • $ git checkout 해당원본
  • 최신화된 코드베이스를 가지고 새로운 기능을 개발할 새로운 branch 생성 $ git checkout -b 만들 새로운 branch이름
  • 새로운 기능 개발
  • 개발이 끝나면 나의 repo에 push하는데
    이때! my repo 내에서도 새로만든기능 branch에다가 push!
  • 해당 branch를 master repo로 pull request하면 하나의 기능 개발 마무리

또다른 기능을 개발해서 추가할 때에도 위의 과정을 반복하면 된다.

빠르게 변하는 프로젝트일수록 동기화는 매우 중요하고, 코드를 수정하거나 반영하기 전에 항상 동기화 해주는 습관이 필요하다.

키워드
git pull upstream master

참고 블로그

profile
👩🏼‍💻 SWE (FE)

0개의 댓글