Nathan's 개발 일지

Git Workflow 본문

개발 공부 정리/git

Git Workflow

Nathan.YT 2021. 1. 11. 16:50

git work flow

 

소프트워를 개발할 때 개발자들은 동일한 소스코드를 함께 공유하고 다룹니다. 동일한 소스코드 위에서 각 개발자들은 다른 일을 진행하게 되는데요. 이와같이 여러 사람이 동일한 소스코드 기반으로 서로 다른 작업을 할 때는 서로 다른 버젼의 코드가 만들어 질 수 밖에 없습니다.

 

여러 개발자들이 동시에 다양한 작업을 할 수 있게 해주는 기능이 바로 브랜치(branch)입니다. 각자 독립적인 영역에서 소스코드를 변경할 수 있고 이렇게 분리된 영역에서 변경된 내용은 원래 버젼과 비교하여 새로운 버젼으로 만들 수 있습니다.

 

메인 브랜치 (main branch)

 

  • master: 배포 가능한 상태만을 관리. 커밋할 때에는 태그를 사용하여 배포 번호를 기록.
  • develop: 통합 브랜치의 역할을 하며, 평소에는 이 브랜치를 기반으로 개발 진행.

 

피처 브랜치 (Feature branch)

 

새로운 기능 개발 및 버그 수정이 필요할 때에 'develop' 브랜치로부터 분기합니다. 개발이 완료되면 'develop' 브랜치로 병합하여 다른 사람들과 공유합니다.

 

릴리즈 브랜치 (Release branch)

 

버그를 수정하거나 새로운 기능을 포함한 상태로, 모든 기능이 정상적으로 동작하는지 확인. 관습적으로 브랜치 이름 앞에 'release-'를 붙입니다. 릴리즈를 위한 개발 작업은 'develop' 브랜치에서 계속 진행해 나갑니다.

 

최종적으로 릴리즈를 위한 버그 수정 등의 개발을 진행하고, 배포 가능한 상태가 되면 'master' 브랜치로 병합시키고 릴리즈 번호 태그를 추가합니다.

 

릴리즈의 수정사항은 'develop' 브랜치에도 적용해 줘야 합니다. 배포 완료후 병합 작업이 필요합니다.

 

핫픽스 브랜치(Hotfix branch)

 

버젼 배포 후 긴급하게 수정할 필요가 있을경우 'mater'브랜치에서 분기하는 브랜치. 관습적으로 'hotfix-'를 브랜치 앞에 붙입니다. 문제가 생겼을때 'master'브랜치에서 직접 브랜치를 만들어서 필요한 부분만 수정하고 병합하여 배포합니다. 물론 변경사항은 'develop'브랜치에도 병합을 해서 문제가 되는 부분을 처리해야합니다.

브랜치 생성 간단 예시

 

브랜치는 현재 작업 공간을 베이스로 하여 만들어집니다. 현재 작업공간인 원본에서 브랜치를 만들 경우 위와같이 생성이 됩니다.

$git checkout을 통해 원하는 브랜치로 이동이 가능하고, $git checkout -b를 사용하면 브랜치의 생성과 이동이 함께 됩니다.

 

  • $git checkout 기능1: 기능 1브랜치 이동

  • $git checkout -b 기능1: 기능1 브랜치 생성 + 브랜치로 이동

 

ex) 원본을 베이스로 하는 다른 브랜치를 만들고 싶다면?

 

베이스로 하고 싶은 브랜치로 이동 ($ git checkout 원본) -> 브랜치를 생성 ($git checkout -b 기능2)

 

ex) 브랜치 결과를 병합하려면? (마스터와 병합한다고 가정)

 

원하는 브랜치로 이동 ($ git checkout master) -> 이동 후 브랜치 결과를 병합 ($ git merge 기능1)

 

ex) 브랜치를 삭제하려면?

 

$ git branch -d 기능2

 

자주쓰는 git 명령어 모음

 

  • git status  : 깃 저장소의 상태 확인

 

  • git add : 파일이나 디렉토리를 인덱스에 추가하는 명령어 (ex. git add newfile.js)

 

  • git commit : 인덱스에 추가된 파일이나 폴더의 내용을 저장소에 넣을때 (ex. git commit -m "done file")

 

  • git branch : 브랜치에 대해 다양한 작업을 수행하는 명령어 (ex. 만들기- git branch branch-name / 목록- git branch / 삭제- git branch -d branch-name)

 

  • git checkout : 원하는 브랜치로 이동할때 사용 (ex. git checkout branch-name)

 

  • git log : 커밋 히스토리를 보는데 사용 (ex. git log -n 10 / -n 내역보기 수)

 

  • git grep : 저장소의 파일 내용 중 특정 단어가 포함된 파일을 찾을 때 사용 (ex. git grab "단어")

 

  • git clone : GitHub있는 저장소를 자신에 컴퓨터에 다운로드할때 사용 (ex. git clone url)

 

  • git remote : 원격 저장소를 조작하는데 사용 (ex. 목록- git remote / 자세한 목록- git remote -v / 원격 저장소 추가- git remote add name url / 원격 저장소 제거- git remote rm name)

 

  • git reset : 커밋을 취소할때 사용 (ex. git reset -soft HEAD^)

 

  • git merge : 현재 브랜치에서 다른 브랜치의 변경사항을 병합할 때 사용 (ex. git checkout master -> git merge bug-fix)

 

  • git pull :원격 브랜치의 변경 사항을 땡겨오기 위해 사용하는 명령어 (ex. git checkout master -> git pull origin master) 

 

  • git push : 로컬저장소에 머물러있는 변경 내용을 원격 서버로 올리기 (순서: git add -> git commit -> git push) (ex. 마스터로 push - git push origin master)

 

정리

 

  1. git에서 fork를 하여 내 저장소를 만든다.
  2. git clone을 통해 내 컴퓨터로 내 저장소의 파일을 받는다.
  3. git status를 확인한다.
  4. 변경된 사항이 있을경우 git add를 하여 staging한다.
  5. stating된 내용을 확인 후 git commit한다.
  6. commit 후 git push를 통해 원격저장소에 전송한다. (git push origin 저장소 / 저장소 안에는 보내고자하는 저장소가 들어가야함 / git push origin master는 마스터 저장소에 푸시 / git push origin branch1은 branch1에 푸시)
  7. pull request로 fork한 저장소로 보낸다.

원격 저장소로 전송 전까지는 다른 사람이 접근할 수 없음

확인할 것

  1. 지금 저장소가 지금 내가 수정하고자 하는 브랜치가 맞는지 확인!
  2. 내가 보내고자 하는 저장소가 아닌 경우 이동 (git check out 이동하고자하는곳)
  3. 다른 사람의 저장소에 맞춰서 변경 내용을 갱신하려면 git pull하기.

유용한 블로그

 

깃 초보자를 위한 꿀팁 정리 블로그 주소

게임을 통해 알아보는 git 사용법

Comments