[git, 오픈소스] 오픈소스 컨트리뷰톤 OT - 1. git/github 세미나

Jung Wish·2020년 8월 20일
0
post-thumbnail

오픈소스 발대식이 끝나고, 8/8일에 프로젝트 OT가 있었습니다.

  1. git/github 세미나
  2. firstcontributhon에 실제 PR 날려보기
  3. 프로젝트 소개와 일정 공유

순서로 진행되었는데, 새로 알게된 개념들을 잊지 않고자 1, 2 부분에 대해서 나누어 기록하고자 합니다.✍🏻

git/github 세미나

첫째, Git은 분산 버전 관리 시스템(DVCS)입니다.

  • 서버 하나에 저장소가 있는 중앙집중형 버전관리 시스템(CVCS)과 다르게, 개발자별로 로컬 저장소를 두고 서버에 반영합니다.
  • 로컬 저장소에서 각자 작업을 하므로, 네트워크 환경에 구애받지 않고 작업이 가능합니다.

둘째, Git에서 코드는 상태 별로 나누어 관리되어집니다.

이미지 출처 : git-scm

  • tracked
    - git의 관리대상이 된 파일을 지칭합니다.
    • commited : commited 된 파일의 상태입니다.
    • modified : git의 관리 대상이고, diff(델타)가 존재하는 파일입니다.
      • 작업공간에서 수정된 파일git diff 명령어로 볼 수 있습니다.
    • staged : modified 상태인 파일이 commit을 하기 위해 staging area로 올라간 상태입니다.
      • 파일이 commit 되려면 반드시 staged 상태가 되어야 합니다. git add 명령을 통해 staged 상태로 바꾸어 줄 수 있습니다.
  • untracked
    - 아직 git의 관리대상이 아닌 파일을 말합니다.

셋째, Git은 데이터를 스냅샷으로 저장합니다.

이미지 출처 : git-scm

  • 스냅샷(snapshot)이란, 특정 시간에 저장된 데이터를 별도의 파일이나 이미지로 저장하는 것을 말합니다. Database의 복원은 이 스냅샷을 기준으로 이루어지곤 합니다.
  • 커밋을 하면 Git은 현 Staging Area에 있는 데이터의 스냅샷에 대한 포인터, 저자나 커밋 메시지 같은 메타데이터, 이전 커밋에 대한 포인터 등을 포함하는 커밋 개체(커밋 Object)를 저장합니다.
  • 커밋 개체에는 이전 커밋 포인터가 있어서 현재 커밋이 무엇을 기준으로 바뀌었는지를 알 수 있습니다.

넷째, Git은 branch와 merge를 통해 작업 & 협업합니다.

  • branch : 41 byte의 작은 파일로 빠르고 가볍게 처리가 가능합니다. 현재 디렉토리와 같은 형태를 취하고 있지만 원본에 영향없이 테스트할 수 있습니다.
  • merge : 두 브랜치의 코드를 하나로 병합하는 것을 말합니다.
    ➡️ 만약 두 브랜치가 별도의 파일을 수정하였다면 별도로 , 두 브랜치가 같은 파일을 다르게 수정하였다면 두 브랜치의 공통 조상을 찾아 (충돌이 발생한다면 사용자에게 직접 충돌을 해결하게 하고) 조상과 비교해 바뀐 부분을 merge 하여 새로운 commit을 만들어 냅니다.
    - fast-forward merge : 부모(master) 포인터만 자식 포인터로(branch) 이동

    - 3-way merge : 부모(master)와 브랜치(branch)의 공통조상을 찾아서 merge하고 새로운 commit 생성(이 merge 커밋은 빈커밋입니다.)

다섯째, git stash는 유용하니, 평소에 활용합시다!

  • git stash는 modified && Tracked || Staged 인 파일들을 스택에 임시 저장하는 기능을 합니다.
  • 다른 브랜치에서도 가져올 수 있는데, 충돌이 나면 pop으로 가져올 수 없습니다.
  • 브랜치 이동시 변경사항을 커밋하지 않고 잠시 보관할 때 유용하게 사용할 수 있습니다.

여섯째, 프로젝트 버전 관리의 효율성을 위한 브랜치 전략이 존재합니다.

  • 브랜치 전략은 프로젝트 버전관리를 위한 구성원간의 약속을 말합니다.
  • 회사마다 팀마다 기준이 다르기 때문에, 추구하는 브랜치 전략이 다릅니다.
  • 가장 잘 알려진 브랜치 전략Git-Flow입니다.
    • Branches
      • Master(배포-준비상태)
        • Develop(현재 개발중)
        • Feature(Develop에서 분기된 브랜치)
        • Release(Develop 분기 후 테스트 진행)
        • Hotfix(문제가 생겼을 때, Master에서 분기되어 문제 해결)

Reference

오픈소스 컨트리뷰톤(2020) Typescript Handbook 한글화 프로젝트의 오리엔테이션 시 진행했던 Git 세션에 참여하고 작성된 게시물입니다.

아래의 사이트에서 용어와 과정을 참고하였습니다.

profile
Frontend Developer, 올라운더가 되고싶은 잡부 개발자, ISTP, 겉촉속바 인간, 블로그 주제 찾아다니는 사람

0개의 댓글