Git

Table of contents

Flow

  • master : 배포되었거나 배포할 브랜치
  • develop : 다음 버전을 개발하는 브랜치
  • feature : 기능을 개발하는 브랜치
  • release : develop브랜치의 작업 내용이 정식버전으로 병합 전에 분기되는 브랜치 (즉, master로 병합 전 테스트하는 브랜치)
  • hotfix : 배포 버전에서 발생한 버그를 수정하는 브랜치

master와 develop 브랜치가 주요 브랜치이면 나머지 브랜치는 운영에 따라 선택되는 브랜치이다.

Git 저장소에 따른 workflow

upstream과 origin remote 저장소가 있으면 local에서 코드 수정하고 origin에 푸시 후 upstream으로 MR을 한다.
이후 병합된다면 upstream에 있는 코드를 풀하여 사용한다. (flow만 참고)

명령어

  • git config –list : git 설정 정보 보기
  • git fetch –all –prune : remote branch에서 brach의 삭제나 추가가 있을 시 local에 동기화 시키는 작업
  • git clone [git URL]: 저장소 가져오기 (저장소 명으로 폴더가 생성되고 그 안에 파일들이 위치)
  • git branch : 현재 사용 중인 로컬 branch 확인
  • git branch [branchName] : branch 생성
  • git checkout [branchName] : branch 변경

에러 대응

로컬과 원격 저장소의 기록 시작이 다를 경우

  • 현상
    git pull이 되지 않는다.(refusing to merge unrelated histories)

  • 해결
    병합을 통해 pull이 되도록 한다.

$ git pull origin 브런치명 --allow-unrelated-histories


SSH keys 파일권한

  • 현상
    권한 문제로 git과 연결되지 않는다.
$ git clone [git주소]

...
Permissions 0466 for '/Users/maugou/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/Users/maugou/.ssh/id_rsa": bad permissions
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.
...

  • 해결
    사용자에게만 읽기 권한을 부여한다.
$ chmod 400 id_rsa

Commit patch

$ git format-patch [commit hash]

선택한 commit hash부터 마지막 commit 까지의 patch를 생성한다.
만약 갯수로 제한하고 싶다면,

$ git format-patch -4

이 경우 가장 최근에 반영된 commit 4개를 patch로 생성한다.

생선된 patch를 특정 프로젝트에 적용하기 위한 명령어는 아래와 같다.

$ git am [patch 파일명]