git 정리

2020. 11. 9. 11:09개발&TIL/devops

버전관리 시스템 왜필요한가.

  • 잘못된 변경을 복구
  • 특정 시점으로 버전을 돌릴수 있다.
  • 소스코드의 변경사항을 추적할 수 있다.
  • 누가 수정했는지 추적가능
  • 여러사람이 수정한 변경을 효과적으로 동기화 할 수 있다.

version control system

  • 과거 서브버전의 경우 브랜치가 중복머지가 되는 문제점이 존재, 머지 정보가 없었다.
  • 종류를 보면
    • local VCS - RCS 라는 유닉스베이스 툴
    • centralized VCS - CVS, SVN
    • distributed VCS - GIT, 머큐리얼?

용어 정리

  • change - 버전 컨트롤 하의 문서의 수정을 의미
  • change list -
  • brahch
  • tag
  • trunk - mainline, master 개발을 위한 베이스라인
  • repository
  • working copy - 틀정 시점의 로컬 카피
  • checkout
  • clone
  • commit
  • merge
  • conflict, resolve

git

  • 리눅스 토발즈 형이 개발 10년전

  • bitkeeper(DVCS) 와 분쟁으로 개발시작함.

  • 토발즈형이 기초를 잡아주고 다른형이 실개발 했다고 함.

  • 데이터 무결성 파일 디렉토리등 모든것이 체크섬(SHA-1)으로 관리

  • 저장 구조

    • working directory -> staging area -> .git directory
  • 저장소 만들기

    • git repo
    • git init
    • touch README.md
    • git add README.md
    • git commit

HEAD의 개념

  • 로컬 리포지토리가 어딜보고 있는지 포인터 개념

머지개념

  • fast-forward
    • head만 옮겨가도 가능한 경우라고 보면됨
  • none fast-forward
    • 두개의 브랜치가 다른길을 가고 있는 경우
  • 3way-mege
    • 합치려는 포인트 2곳과 가장가까운 공통 조상을 참조

branch workflow

  • long-running branch - master, develop 은 안정적, 지속적으로 유지
  • topic branch - feature 등 짧은 브랜치 단위

rebase vs merge

  • 정책적으로 rebase를 사용할지는 팀/그룹 논의 해야 함. 보통

  • rebase - 말그대도 베이스를 변경하는것

  • rebase 동작 및 사용이유

    • master, experiment 일때

    • git checkout experiment

    • git rebase master

    • 위와 같은 처리면 experiment 의 master 베이스 시작점을 바꾼다.

    • 브랜치가 많을때 머지로 처리시 커밋로그가 지져분하다.

    • 메인라인만이라도 1라인으로 히스토리를 남기고 싶을 때 rebase를 쓰는 편이다.

    • 가령 공개 깃헙 프로젝트에서 fork를 통한 merge 요청이 오거나 개발 대상자가 많을 경우 사용한다고 함.

설정

  • git config -help
  • 개발팀단위로 일부설정은 통일하자 (white space, indent 등등)
  • gitignore.io 사이트를 활용해서 이그노어 파일 만들수 있음 (인텔리제이 생성시 문제가 가끔 있음)
  • git LFS - 깃헙이 100메가가 한계라서 더쓰고 싶을 경우 쓰는 툴

기타

  • fork한 repo는 관례대로 origin 으로 네이밍 지정
  • fork 원본 repo는 upstream 으로 네이밍 지정
  • git stash - 현재 상태를 임시 저장하는 기능
  • git submodule - gradle 서브프로젝트와 비슷하고 submodule의 head를 관리

anti pattern

  • 서버에서 직접 수정 커밋 하지말것
  • 빌드와 배포를 분리하자. 빌드서버에서 빌드처리를 하고 배포하도록 분리 GIT서버도 과한 트래픽에 약하다?

sw 형상관리

  • sw 생명주기 전반에 대한 관리
  • 코드의 변경, 빌드, 테스트, 배포 까지의 포괄적인 관리

a successful git branching model

  • git flow의 가장 기본이 되는 패턴 (구글 검색하면 나오는)
  • 메인스트림을 두개로 가는 것 master, develop
  • 마스터에는 검증되지 않는 코드는 넣지 않는다.
  • 마스터로 머지될때 배포

supporting branches

  • 마스터와 develop 외의 브랜치를 지칭

  • feature 브랜치

    • develop 에서 시작해서 머지된다. -no-ff 로 fasr-forward 되지 않도록 한다.
  • release 브랜치

    • 새로운 릴리즈를 준비할때 사용하는 브랜치, 테스트/QA 시에 진행
    • 릴리즈 준비가 끝나면 master, develop 에 merge되고 삭제된다.
    • 릴리즈 버전에 대한 태그를 생성한다.
  • hotfix 브랜치

    • master 에서 생성하고 master, develop에 머지한다.
    • 단 release 가 있을 경우 release에 머지

git flow

- git 용 flow 플러그인으로 보며됨
- https://danielkummer.github.io/git-flow-cheatsheet/index.ko_KR.html
- 쓰면 편하다.

github-flow

- https://guides.github.com/introduction/flow/
- git-flow 를 더욱 단순화한 구조
- 메인스트림을 master 만 가지는 구조
- Pull request 로 협업 머지
- merge 되면 master는 바로 배포
- 단순한 브랜치 전략
- ci, 자동화 배포를 구성한 경우 적합

github

  • 2008년 런칭
  • 오픈소스 프로젝트 호스팅의 몰락(소스포지 등)으로 인한 인기?
  • MS인수 발표

깃헙이 인기인 이유

  • git 자체
  • 웹UI 협업 기능들
  • 공짜
  • 오픈소스 개발 문화를 바꾼 Fork & Pull request
  • 기업용 솔루션 제공

fork

  • 리포지토리 통째로 복사 히스토리 전체가 복사되고 프로젝트와 연결됨
  • 포크해서 코드를 수정한 후에 원래 저장소에 보내는 pull request 형태로 프로젝트에 기여

pull request

  • 저장소의 브랜치의 내용을 승인 하며 머지 커밋하는 방식
  • 변경된 내용을 승인 요청을 통해서 적용하는 기능
  • 온라인으로 코드리뷰를 하는 좋은 도구중 하나

END

728x90