DevOps-Git-07-Github-타인과 협업(clone, pull)

SeungWoo Yoo ·2023년 2월 7일
0

1. 동료 1명 구함

원격저장소의 장점은 남들과 협업할 수 있다는 겁니다. 원격저장소에 있던 코드를 같이 짜고 싶다면 어떻게할까요.
그 친구도 똑같이 코드짜서 git push 어쩌구 하면 그게 협업 끝입니다.

# 팀원 이라는 폴더 생성
git clone 원격저장소주소

git clone하면, 만들었던 리포지토리가 다운받아집니다.
cf. 필요할 땐 특정 브랜치 1개만 clone 해올 수 있습니다

이제 팀원도 폴더 열어서 코드짜고 commit 하고 git push 하면 됩니다.
다만 그 팀원도 github 아이디가 있어야하고, 그 팀원의 아이디를 Collaborators 메뉴에 등록해놔야 협업가능합니다.


2. 팀원이 commit 시 문제

git push는 맘대로 할 수 있는게 아닙니다. 다른 사람이 만든 파일이 원격저장소에 생기면 git push 못합니다.

예를 들어 b라는 파일을 만들고 commit해서 원격저장소가 타인에 의해 업데이트되었다고 칩시다.

다른 곳에서 일하던 팀원도 방금 만든 파일을 원격저장소에 업로드하고 싶어진겁니다.
예를 들어, c라는 파일을 만들었다고 칩시다. 그럼 이전과 같이 commit 하고 나서 git push 똑같이 하면 됩니다.
(팀원인 척 해줄 친구가 없으면 그냥 원래 코드짜던 곳에서 git push 해봅시다)

# git장인3 폴더에 c라는 파일 생성 후 아무렇게 수정
git add .
git commit -m 'c만들었음'
git push

 ! [rejected]        main -> main (fetch first)
error: failed to push some refs to 'https://github.com/berenickt/git-lesson.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

"에러납니다" 왜냐하면 원격 vs 로컬 내용이 다르다면 로컬저장소에서 git push가 안됩니다.
왜냐면 그런 상황에서 대충 git push 해버리면 코드가 꼬이기 때문에 얘가 미리 예방해주는 것일 뿐입니다.


3. git pull : 현재 원격저장소 가져오기

pull은 원격저장소에 있던 모든 브랜치 내용을 가져와서 로컬저장소에 합치라는 뜻입니다.
이걸 해주면 로컬이 최신상태가 되기 때문에 이제 git push가 가능합니다.
결론은 변동사항이 생겼다면 git pull하고 나서 git push 하면 됩니다.

# 📝 git pull 원격저장소주소
# -u를 잘해놨다면 원격저장소 주소 생략 가능
git pull

# 원격저장소 최신애용이 로컬저장소에 있을 떄만 git push 가능
git push
  • git pull 원격저장소주소 브랜치명입력하면 특정 브랜치만 가져올 수 있습니다.
  • origin이라는 변수명을 등록해놨으면 당연히 사용가능
  • 예전에 -u 했었으면 git pull, git push까지만 입력해도 잘 됨

4. git pull = git fetch + git merge

git pull 입력하면 자동으로 git fetch + git merge를 해줍니다.

  • git fetch원격저장소에 있는 commit 중에 로컬에 없는 신규 commit을 가져오라는 뜻이고

  • git merge그걸 merge 하라는 뜻입니다.

    그래서 git pull할 때 팀원 2명이서 같은 파일을 건드리고 있을 경우 merge conflict가 날 수 있습니다.
    conflict는 branch 다룰 때 다뤄봤으니 알아서 해결하면 됩니다.


5. 결론

그래서 결론은 협업시 git push 하기 전에 뭐라그러면 git pull하면 됩니다.

profile
Front-end 공부 중... 책 읽는 걸 좋아합니다.

0개의 댓글