[git, 오픈소스] 협업을 위한 git 사용 <part 2 : branch & merge, pull request>

Jung Wish·2020년 8월 6일
0

OSS 오픈소스 컨트리뷰톤 2020에 대한 내용은 여기로

PART 2 : branch & merge, pull request

오픈소스 협업 전 github ID/PW 캐싱데이터 업데이트

사전에 ID/PW 캐싱데이터를 삭제하고 진행하는 것이 좋습니다. 회사 git 계정과 개인 git 계정이 다른 경우에(또는 다른 사람 계정과) 원하지 않는 충돌이 생길 수 있기 때문입니다.

캐싱데이터는 말그대로 계정 정보 저장을 위한 임시공간이기 때문에 지워도 문제가 되지 않습니다. 앞으로 계속 진행하게 될 계정으로 업데이트 해주면 됩니다.

캐싱데이터 삭제 및 업데이트

  • 캐싱데이터 삭제하기
git config --global --unset credential.helper
git config --system --unset credential.helper
  • 캐싱데이터 업데이트 ( 차후 업데이트 계정 정보 )
git config --global user.email "email@example.com"
git config --global user.name "name"

git branch 만들고 merge 하기

git 저장소의 장점 중 하나는 branch를 만들어 현재 프로젝트와 똑같은 환경을 복제하여 기존 path, 폴더 setting, 모든 files 을 유지하면서 기존 폴더와 다른 환경에서
Testing 이 가능하다는 점입니다.

따라서, 협업 시 맡은 부분만 작업하기 위해서 또는 개인의 프로젝트 물을 다른 환경에서 테스트해보고 싶을 때 등에 적용하는 branch & merge 작업을 살펴보겠습니다.

branch의 생성, 삭제, 비교, merge

  • 브랜치(branch) 만들기
# branch 생성 후 자동으로 브랜치 변경
git checkout -b "branch_name"
  • 브랜치(branch) 삭제하기
# 기존의 브랜치에서 -> master 이동
git checkout master
git branch -d "branch_name"
  • 브랜치(branch) list 보기
git branch --list
  • 기존(master)브랜치(branch)작업의 다른 점 확인해보기
git checkout -b "test/add"
git touch example.txt

# git diff or git status로 현재 환경에서의 변화 확인
git diff
git status

# master 브랜치로 넘어가서 현재 환경에서의 변화를 보고 
# test/add 브랜치와 다른 것 확인하기
git checkout master
git diff
git status
  • master 환경에 브랜치(branch) merge 하기
# 현재 text/add, master 브랜치가 존재하는 윗단계와 같은 환경이라 가정
# master 브랜치로 바꿔준 후 원하는 브랜치를 merge 해준다.
# merge 작업시 각 브랜치에 같은 파일을 수정했을 경우 충돌이 발생한다.
# 충돌이 발생한 파일의 충돌을 해결해준 후 git add -> git merge 작업
git checkout master
git merge text/add # text/add -> branch 명

오픈소스 작업물과 merge를 진행할 때,

일단 원하는 오픈소스 작업이나 팀프로젝트의 repositary를 fork해오면,

fork해온 원 저장소는 = upstream
fork해 생성한 본인의 저장소는 = origin

으로 구분이 됩니다(명칭은 바꿀 수 있지만, 통상적으로 저렇게 많이 사용합니다).

그런데, 보통 upstream 저장소의 push 권한은 소수의 사람에게만 허용이 되어 있기때문에 수정사안을 pull request 게시판으로 보내, 허용된 부분에 대해서만 merge가 이루어집니다.

pull request로 보낸다고 다 merge 되는 것은 아니며, 보통은 reject 당할 때, 해당 게시물에 comment가 달리니 이유나 수정사항에 대해 충분히 토의하고 재도전하다보면 merge가 되어 contributer가 될 수 있습니다.

git add -> git commit -> git push origin [branch] -> PR
위와 같은 순서로 진행됩니다.
pull request는 본인의 저장소에 push를 진행하면, pull request 버튼이 활성화 된다. 이를 누르고 title, message를 작성하면 됩니다.

그밖에, git 작업시 유용한 명령어들

  • 수정내용(add) 잠시 저장하기
    • stash는 변경 파일을 임시저장 할 수 있는 modified && tracked file 입니다.
    • 여러개의 변경내용을 저장 할 수 있습니다.
    • commit을 만들기 애매할때 또는 현재 변경사항을 unstaged하고 다른 테스트 진행을 위해 branch를 생성하고자 할때 사용합니다.
# git add로 staging된 내용을 잠시 다른 곳에 임시저장한다.
git stash
# 저장해두었던 사항을 꺼낸다.
git stash pop
  • 최신 commit 기준으로 복구시키기
    • checkout은 대출, 인출 같은 의미로 git에 저장된 히스토리를 꺼내온다는 개념입니다.
    • reset의 --hard 옵션은 추가된 변경 파일까지 삭제한다는 의미입니다.
# 특정폴더 기준으로, 이전 커밋 상태로 복구시킨다.
git checkout -- [directory]
# 현재 remote 저장소 기준의 최신상태로 복구시킨다.
git reset --hard origin/master
  • add 명령 취소하기
git reset [staged file]
  • commit 삭제하기
# 고유 커밋 해시 아이디로 삭제
git reset --hard "commit ID"
# HEAD~(num) -> num은 HEAD에서부터 몇번째인지를 뜻한다.
# HEAD가 가리키는 것은 최신커밋이다.
git reset --hard HEAD~1
  • commit에 라이센스 서명 남기기
    • 일반적인 commit 명령에도 Author정보가 적히지만, 코드의 저작권 문제를 법적으로 주장하기 위해서는 라이센스 서명을 남기는 것이 좋습니다.
    • 특히나 오픈소스 같은 경우!
# -s : signed-off-by Author licence 표시가 생긴다
# -m : commit title 메세지 작성
git commit -sm "message"
  • commit 수정하기
    • 새로운 커밋을 생성하기 애매하고, 이전커밋에 흡수시키고 싶을 때나 커밋에 수정하고 싶은 내용이 있을 경우 사용합니다.
# 현재의 stage 내용이 새로운 commit 선언없이 기존 commit 변경사항에 반영된다.
# 기본으로 설정한 text editor가 실행되어, commit 내용을 수정할 수 있다.
git commit --amend

Reference

  • 본 명령어들은 2020 오픈소스 컨트리뷰톤 사전 강의인 수강하고 정리한 내용입니다.
    • 강좌 : 오픈소스 101
    • 스피커 : 리얼리눅스 송태용님 [git]
profile
Frontend Developer, 올라운더가 되고싶은 잡부 개발자, ISTP, 겉촉속바 인간, 블로그 주제 찾아다니는 사람

0개의 댓글