TIL_210223 페어와 함께 git

jeyoon·2021년 2월 23일
2
post-custom-banner

Today I Learned

  • Git workflow, 충돌 해결
  • Git branch

git workflow

  1. 진행할 스프린트의 repository를 각자 fork한다
  2. fork한 스프린트를 각자의 local로 가져온다. $ git clone <Repo URL>
  3. 페어의 repository와 나의 local을 연결
    $ git remote add pair <Repo URL for pairs fork>
    $ git remote -v
  4. 드라이버를 맡은 사람이 먼저 코드를 작성하고 commit
    $ git add <change file>
    $ git commit -m 'change'
  5. 자신의 깃헙 레포에 push
    $ git push origin master(or other branch name)

이제 드라이버와 네비게이터 역할을 바꾼다.

  1. 새로운 드라이버는 자신의 로컬로 페어의 레포를 가져온다
    $ git pull pair master (or other branch name)
  2. 새로운 코드를 작성한 후 commit
    $ git add <change file>
    $ git commit -m 'change TOO'
  3. 자신의 깃헙 레포에 push
    $ git push origin master (or other branch name)
  4. 다시 드라이버와 네비게이터의 역할을 바꾸고, 바뀐 드라이버는 직전에 작성된 코드를 자신의 로컬로 가져온다.
    $ git pull pair master (or other branch name)

1 ~ 9를 반복한다.

주의 !! ➡️ push는 자신의 레포지토리에, pull은 페어의 레포지토리에서 해야 한다.

✔️ 프리코스 TIL (git 관련)
https://velog.io/@wpdbs4419/TIL.-Day8Command-Line-InterfaceCLIGit

충돌 해결

  1. 페어와 내가 각각 과제 파일을 fork, clone 해 온다.
  2. 각자의 로컬에서 파일을 수정하였다

💥 페어와 내가 동일한 라인을 수정한 경우 충돌 발생

  • git status 명령어를 통해 어떤 파일이 충돌하고 있는지 확인할 수 있다.
  • vs code에서 충돌 확인 및 수정
    • Accept Current Change: 내가 수정한 내용으로 파일에 반영
    • Accept Incoming Change: Remote Repository의 내용으로 파일에 반영
    • Accept Both Changes: 변경 사항 모두를 반영
  • 수정 완료 후 git add . ➡️ git commit
    • merge commit은 자동으로 commit 메시지가 생성됨
  • remote repository에 push하면 Merge branch ‘master’ of <url주소> 라는 commit 메시지가 기록된다.

case 1 (conflict 발생 ⭕️ )

  • 내 로컬에서 작업한 파일을 git add, git commit, git push origin master
  • 페어도 페어의 로컬에서 작업한 파일을 git add, git commit, git push origin master(페어 꺼)

case 2 (conflict 발생 ❌ )

  • 내 로컬에서 작업한 파일을 git add, git commit 하지 않은 채로 git push origin master
  • 그리고 나서 git pull pair master ➡️ Auto-merge 됨
    • 이 때, 내 파일이 우선시 되는 것을 발견
    • 예를 들어, 내 로컬의 js파일은 1~10번째 줄까지, 페어의 레포에 있는 파일에는 1~15번째 줄까지 작성이 되어 있었고 내용은 달랐음.
    • pull을 해 오면 내 파일 1~10번째 줄까지는 똑같이 유지되고, 페어 js파일의 11~15번째 줄의 내용이 추가됨.

case 3 (conflict 발생 ⭕️ )

  • 내 로컬에서 작업한 파일을 git add, git commit 까지 한다 (push는 ㄴㄴ)
  • git pull pair master를 하면 내용이 다른 부분에서 충돌이 발생한다.
    ➡️ VS Code에서 충돌이 발생한 부분을 수정해준 후 git push origin master를 하면 merge 완료

git push pair master 를 쓸 수 있나❓
➡️ 페어가 깃에서 사용자에게 access 권한을 주면 가능

git branch

  • branch에 어떤 작업을 해도 원본에는 아무 영향 ❌

  • 여러개의 branch ➡️ 각각의 branch는 서로 영향 ❌

  • 하나의 원본을 베이스로 하여 여러개의 branch를 만들어서 각자 자신이 맡은 기능을 만들 수 있음

  • 새로운 기능을 개발할 때 / 원본에 영향을 주지 않고 다양한 시도를 하고 싶을 때

  • 나중에 합치는 작업 필요 (master 계정으로 git merge dev)

branch 만들기

  • branch는 현재 작업공간을 베이스로 만들어짐
  • 내가 현재 작업하고 있는 곳을 항상 확인 git checkout
  • 작업 공간을 옮기는 방법
    ➡️ $ git checkout <브랜치 이름> 을 통해 현재 작업공간(브랜치)을 옮길 수 있음
  • $ git checkout -b 기능1
    ➡️ 기능1 branch 생성 + 기능1 branch로 작업공간 이동
  • 원본을 베이스로 하는 다른 브랜치를 만들고 싶다면?
    1) 베이스로 하고 싶은 브랜치로 작업 공간을 옮긴다 $ git checkout 원본
    2) 브랜치를 생성한다. $ git checkout -b 기능2
  • origin repository를 fork, clone 해온 후 $ git checkout -b function1 을 하면 내 로컬에 function1 가지가 만들어진 것
  • git push origin function1를 해줘야 origin master에 function1 가지가 만들어짐

✍️

  • 블로그 정리하다가 한번 날렸다 ㅡㅡ 개빡챠
  • 느꼈다. 절실히. 예습의 필요성
post-custom-banner

0개의 댓글