네이버 AI 부스트캠프 4기 : Day 27

nask·2022년 10월 28일

egoing님 git 특강 3

exclude

  • fontsize 등 로컬 저장소에서 버전 관리가 필요 없지만 gitignore에 넣을 필요도 없는 것들을 넣어둠(팀이 아닌 나만의 정책)

template

  • 예를 들어 config.txt파일뒤에 template을 붙여 구체적인 ID와 비밀번호 대신 USER_ID, USER_PASSWORD처럼 형식만 갖춘 파일로, 해당 영역에 실제 값을 집어 넣어 확장자를 수정하여 사용 가능

clone

git clone "ADDRESS" .git . : 원격 저장소의 버전을 로컬 저장소로 복제함, 마지막 .은 현재 폴더를 의미하며 이걸 안 붙이면 폴더 아래에 생성

Pull

  • 다른 사람이 push한 내용을 pull하지 않고 clone 후 push하면 reject됨

  • pull은 fetch(원격 저장소의 내용을 가져옴) + merge(기존 저장소의 내용과 pull한 내용을 합침)를 통해 각 저장소의 마지막 버전을 합친 새로운 commit 생성

  • conflict 발생 시 수정 후 merge

branch 전략

  • 새로운 기능은 master branch가 아닌 new branch에서 작업 후 병합함

  • master branch가 가리키는 마지막 버전은 언제나 테스트/실행 가능해야 함

git checkout -b add-comment : comment라는 이름의 브랜치를 추가하고 checkout

fast forward : master에서 추가 작업 사항이 없을 때 실험 branch를 merge하면 새로운 commit은 생성되지 않고, master branch가 최근 실험 branch에서 작업한 버전을 가리킴

git merge --no--ff "BRANCH_NAME" : fast forward 가능해도 명시적으로 merge commit을 만듦

Pull request

  • 개념 상 merge requset라고 이해하면 됨

  • 내가 작업한 내용을 master branch에 합쳐달라고 공문 발송

  • Reviewers : 내 코드 리뷰를 맡김

  • Assignees : 담당자를 지정

  • Conversation : branch에서 일어나는 일을 종합적으로 알려주는 timeline

  • Files changed : branch에서 변경된 내용을 보여줌

  • Add single comment : comment를 남김
  • Start a review : 서로 다른 파일들을 한 번에 리뷰하고 finish review
  • 깃허브 홈페이지의 pull request 화면에서 . 입력 시 vscode로 연결되어, 원격 저장소로 바로 커밋 가능(다시 지역 저장소에 반영하려면 git pull)

Merge pull request

1) 책임자가 깃허브 홈페이지에서 merge pull request 버튼 입력

2) git checkout master 후 merge

  • conflict 시 해결 후 merge

Github flow

  • master branch와 실험 branch로 나누어 실험 branch에서 작업한 내용을 master branch가 pull request를 이용해 병합

Git flow


사진출처 : https://techblog.woowahan.com/2553/

  • master branch : 언제든 실행/테스트 가능

  • release branch : release를 위한 branch

  • hot fix branch : 급한 수정사항을 위한 branch

  • develop : 일반적인 개발을 위한 branch

  • features : 실험적인 기능을 위한 branch

  • 병합 후 브랜치 삭제

cherry pick

  • 특정 버전을 지정해 부분 merge

  • git cherry-pick "COMMIT ID"

rebase

  • 버전 흐름을 알기 쉽게 하기 위해 해당 브랜치의 base를 조작함

  • merge에 비해 간단하지만 거짓이고, 이해하기는 쉽지만 구현은 어려움

  • git이 익숙해지고, 필요해질 때 사용 권장

revert

  • 이미 push한 내용을 수정하기 위해 사용

  • 여전히 3 way merge 방식(삼자대면)이지만 revert 대상인 버전을 베이스로 함

전체 복습

프로젝트 폴더를 만든다.
저장소를 만든다.
git init
파일을 만들고 2개의 커밋을 만든다.
work1.txt => 1
work2.txt => 2
work3.txt => 2
git status
git add FILE_NAME
git commit -m "COMMIT MESSAGE"
tracked & untracked 상태

  • git add를 한번이라도 한 파일은 tracked 상태
  • git commit -a 옵션은 tracked 상태의 파일만 커밋에 포함시킨다.
  • .gitignore(config.txt 파일 ignore하기)
    시간여행을 해보세요,
    git checkout COMMIT_ID
    git checkout master
    reset
    git reset --hard COMMIT_ID로 Branch를 이동
    if(attached){
    HEAD의 Branch가 움직임
    } else {
    == checkout
    }
    브랜치를 만들고 작업할 수 있도록 체크아웃하세요.
    git branch EXP
    git checkout exp
    서로 다른 브랜치에서 작업한다.
    exp 브랜치 : exp.txt
    master 브랜치 : master.txt 커밋
    병합한다.
    git merge exp
    vi editor : :wq를 이용해서 내용을 저장한다.
    같은 파일을 수정한 후에 병합한다.
    master : common.txt
    exp : common.txt

base
1
2
3
4

master
1
m2
3
m4

exp
1
2
e3
e4

git checkout master;
git merge exp;

1
m2
e3
<<<<<<< HEAD

m4

e4

EXP

아래와 같이 수정
1
m2
e3
me4

git add common.txt
git commit -a

3 way merge를 이해한다.

left
base
right
merged
1
1
1
1
L2
2
2
L2
3
3
R3
R3
L4
4
R4
Conflict

원격 저장소에 연결
github.com에 원격 저장소를 만든다.

로컬 저장소에서 실행
git remote add origin REMOTE_URL
git push -u origin master
원격 저장소를 로컬 컴퓨터에 복제
git clone REMOTE_URL .

서로 다른 로컬저장소에서 서로 다른 파일을 수정

git push를 늦게한 저장소는 rejected 됨
git pull (== git fetch + merge origin/master)
git push

  • git은 같은 이름의 브랜치도 원격 브랜치와 지역 브랜치를 다른 브랜치로 취급함.

서로 다른 로컬저장소에서 같은 파일을 수정

git push를 늦게한 저장소는 rejected 됨
git pull => conflict 발생
git add CONFLICT_FILE
git push

병합도구를 이용해서 문제 해결

kdiff3 : http://kdiff3.sourceforge.net/ (비교 프로그램)
windows
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
git config --global --add difftool.kdiff3.trustExitCode false

macos
git config --global --add merge.tool kdiff3
git config --global --add mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3
git config --global --add mergetool.kdiff3.trustExitCode false
git config --global --add diff.guitool kdiff3
git config --global --add difftool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3
git config --global --add difftool.kdiff3.trustExitCode false

pull request

git checkout -b BRNAHC_NAME
git commit -am COMMIT_MSG
git push
github.com에서 pull request 생성
리뷰를 참고해서 코드 개선
github.com에서 merge pull request

브랜치 전략
github flow
github.com에서 만든 브랜치 운영전략

git flow
https://techblog.woowahan.com/2553/

0개의 댓글