[2021 오픈소스 컨트리뷰톤] - 오픈소스 교육

mlsh1112·2021년 8월 3일
1
post-thumbnail

2021 오픈소스 컨트리뷰톤에 참여하게 되었다.
나는 프론트엔드 오픈소스에 기여하는 Cracking Vue.js 팀으로 들어갔다!

활동을 시작하기 전에 오픈소스에 대해 기본 교육을 진행했다.!

기본 교육과 고급교육이 각각 4시간씩 진행된다.
Git 사용법과 오픈소스를 개발하는 법을 배운다!

Git 기본교육

1. Git fork & clone

예전에 정리한 것 이어지는 내용이다!
Git 정리하기

commit : 파일을 바꾼 내용을 뜻한다.
프로젝트 복사는 fork 로 한다.
프로젝트에 들어가면 fork라는 버튼이 있는데 클릭하면 된다.

그럼 자신의 깃헙에 복사된 것을 확인할 수 있다.

그리고 자신의 로컬에 소스코드를 다운받아야 하는데 이것을 clone 이라고 한다.
clone은 이전 git 정리 글에 있다.

2. Git project Reading Skill

1. 가장 많이 개발한 개발자 찾기

# nl 은 number line으로 순위를 표시한다
git shortlog -sn | nl

이건 나의 졸업작품으로 진행한 프로젝트이다.
그나저나 1등이 아니넴,,,하핳

2. 전체 소스 파일 수정 내역(commit) 개수 찾기

git log --oneline | wc -l
# wc -l은 파일 라인수 개수

이 프로젝트의 커밋 개수는 634개 이다.

3. commit 전체 내역

git log --oneline

노란 글씨는 커밋의 고유한 값인 id이다.

4. 소스파일 수정 내역 (commit) 내용 확인

git show <commitID>

commit 의 고윳값인 id를 확인하면 commit 내용을 확인할 수 있다.

5. 전체 소스 파일 commit 자세히 보기

git log -p

6. 특정 날짜 기준 commit 리스트 확인

git log --oneline --after=2021-07-01 --before=2021-07-31

7. commit 내역 과거부터 보기

git log --reverse

3. Git config

오픈소스 개발에 참여하려면 git을 먼저 설정한다.

git config --global user.email <email address>
git comfig --global user.name <user name>

오픈소스 준비 내역 확인하기

git config --list

4. Git branch & commit

git branch

브랜치는 같은 폴더 안 다른 세상이라고 할 수 있다.
더욱 자세한 내용은 이전에 작성한 글에 있다!
Gitflow Workflow[1]

git commit

git commit 방법도 이전에 정리한 글이 있다!
Git 정리하기

5. Git push & GitHub Pull-request

1. push

push는 다운 받은 나의 로컬 저장소에서 commit 내용을 fork 한 저장소로 올리는 것이다.

git branch
git push origin fix-mnist

2. PR (pull request)

pull request 는 공식 오픈소스 프로젝트에 올려도 되는지 request를 던지는 것이다.
PR을 날리면 pull request 게시판에 올라온다.
공식 오픈소스 프로젝트가 upstream이다. fork된 프로젝트는 origin이다.
pull-request 게시판에서 내가 올린 commit을 확인할 수 있다!

6. Git 기본 실습

1. 파일 수정하고 수정 내용(diff) 확인하기

git diff

2. 수정 내용 잠시 저장(stash)

# 수정한 파일 확인하기
git status
# 잠시 저장하기
git stash
# 현재 파일을 확인하면 수정 내용이 없음을 나타낸다
git status
# 잠시 저장한 내용 복구
git stash pop
# 복구된 수정 파일 확인
git status

3. 수정 파일 복구하기

최신 수정 내용을 기준으로 복구한다.

git checkout -- mnist/main.py
git diff

4. git add 취소하기

git add mnist/main.py
git reset

5. commit 삭제하기

git add .
git commit -m "Add import json"
git reset --hard HEAD~1
#HEAD~1 은 가장 위에서 첫번째 내용을 의미

6. commit message에 라이센스 서명 넣기

git add .
git commit -sm "ADD import json"
# -s 옵션은 Signed-off-by를 의미한다.

7. commit 수정하기 (amend)

git add .
git commit --amend

commit 을 amend를 하게되면 commit ID는 변하게 된다!

6. Git 고급 실습

나의 fork 저장소와 upstream 저장소 관리

# upstream 으로 공식 오픈소스 github 프로젝트가 된다.
git remote add upstream <upstream 주소>
git remote -v
# origin으로 fork 받은 자신의 저장소 url
# upstream으로는 공식 오픈소스 저장소 url

7. 오픈소스 개발 중 rebase가 필요한 경우

오픈소스 개발은 나만 개발하는 것이 아닐 것이다!
다른 개발자도 같이 오픈소스를 개발할 것이다.

Fork 한 저장소에서 소스를 push하고 공식 오픈소스로 pr를 날렸을 때,
같은 부분에 다른 개발자가 먼저 pr를 날려서 공식 오픈소스 코드에 먼저 merge가 된다면
충돌이 날것이다....😫🤬🤯🤬🤯🤬🤯

이럴때 rebase가 필요한 것이다!!😎😎

1. rebase 가 뭔데?

upstream에 있는 최신 역사로 베이스를 업데이트하는 것이다!

2. rebase 순서

  1. 공식 오픈소스에서 fetch를 해온다.
  2. rebase로 로컬 저장소의 베이스를 업데이트 한다.
  3. fork한 원격 저장소로 force push 한다.
  4. 그러면 pull request가 자동 갱신된다!!!!
# 공식 upstream 저장소에서 최신 commit 가져오기
git fetch upstream master
# 최신 commit 기준으로 base 갱신 
git rebase upstream/master
#Fork 한 저장소고 수정하기 
git push --force origin fix-mnist
# PR 자동 갱신된다

3. commit 과거로 되감기 (rewind)

감고 싶은 시점의 commit 을 pick -> edit으로 수정한다.

git rebase -i --root

과거의 commit으로 감아진다.

4. commit 현재 시점으로 풀기(continue)

git rebase --continue

마치며

팀프로젝트로 branch를 생성하고 git 으로 협업을 한 경험이 있다. 이번 수업을 들으면서 git으로 협업하는 방식을 자세하게 배웠다. 그 때 이 기능을 알고 있었으면 더 좋았을 것 같다.😂😂

profile
안녕하세요. 이서현입니다( ღ'ᴗ'ღ )

0개의 댓글