• 카테고리

    질문 & 답변
  • 세부 분야

    개발 도구

  • 해결 여부

    미해결

협업 질문있습니다!

20.12.23 17:11 작성 조회수 103

1

안녕하세요 강사님

질문이 두가지가 있습니다~!

<첫번째 질문>

제가 전에 svn을 쓰다가 git을 배우니 혼란스러운데요

예를들어 협업시 원격 저장소와 로컬 저장소 모두에 변경이 있는경우,

svn에서는 원격을 로컬에 update 후 -> 로컬을 원격에 commit하는 방식으로 동기화를 했었거든요.

그런데 git에서는 이것이 pull request라는 기능으로 대체되는것 같더라구요. 

그렇다면 pull request 대신, 원격을 로컬에 pull한 후 -> 로컬을 원격에 push해도 무방한가요?

(만약 맞다면 pull, push 순서는 상관없는건가요? push -> pull해도되는건지요?)

물론 pull request가 좀더 안전하거나 편리한 점이 있겠지만 제 스스로 이해를 하기 위해서 질문드려요.

 제가 혼자 로컬 변경해서 commit + 원격 변경해서 commit 한다음에 pull->push하니까 얼추 서로 동기화가 되는것같더라구요. (물론 충돌이 날까봐 같은 부분을 수정하지는 않았어요)

--------------------------------------

<두번째 질문>

협업시 원격-로컬 상호작용 시나리오가 다음과 같이 세가지가 있다고하셨는데요

1. 원격 변경, 로컬 그대로 - pull

2. 원격 그대로, 로컬 변경 - push

3. 원격 변경, 로컬 변경  - pull request

만약 제가 로컬에서 변경했고, 원격은 변경이 없다고 생각해서 (= 2번인 경우라고 생각해서) 원격에 push했는데,

사실 원격에도 변경이 있었다면 어떡하죠? (=사실 3번 경우였던 것..)

pull request를 썼어야했는데 모르고 push를 써버린거잖아요 

원격에 변경이 있는지를 항상 미리 확인해야하는건가요? (만약 그렇다면 원격이 변경됐는지 확인하는 방법이 있나요?)

답변 2

·

답변을 작성해보세요.

0

레테님의 프로필

레테

질문자

2020.12.29

강사님 답변 너무 감사합니다~!!

0

안녕하세요! 답변 드리겠습니다~

질문 1-1. Pull Request와 Pull->Push가 같은가? 

만일 혼자서 진행하는 프로젝트일 경우, 혹은 로컬 저장소의 변경 내역이 원격 저장소에 전혀 충돌난 부분(겹치는 부분)이 없을 경우에는 동일한 효과를 보입니다.

하지만 여럿이 진행하는 프로젝트에서 충돌의 여지가 있는 코드를 push할 경우엔 다릅니다. 만일 로컬 저장소의 수정과 원격저장소의 수정이 동일한 위치에서 발생했을 때, Pull 하게 되면 그대로 동기화 되지 않고

===========
<<<< 기존코드
============
>>>> 수정한 코드

와 같이 뜰 거에요. 이렇게 된다면 (여럿이 같이 협업하는 프로젝트일 경우) 충돌난 부분 중 무엇을 채택할지 모르겠죠..?

반면 Pull Request는 이러한 충돌 문제에 대해 "사전에 해당 코드에 대해 논의할 수 있다"는 점에서 차이가 있습니다. Pull Request를 날리는 행위 자체가, "내 코드를 당신과 논의하고 싶다"는걸 보이는 거라고 보셔도 무방합니다.

결론은, 여럿이 같이 진행하는 프로젝트의 경우, 내 로컬 저장소에서 변경한 내용과 원격 저장소에서 수정된 내용이 겹칠 경우, 즉 충돌의 여지가 있을 때는 Pull Request를 통해 논의하시길 추천드리고, 그렇지 않은 경우엔 pull and push로 하셔도 무방합니다.

질문 1-2. Pull & Push와 Push & Pull이 같은가?

위 답변과 맥락이 같습니다. 
만일 혼자서 진행하는 프로젝트일 경우, 혹은 로컬 저장소의 변경 내역이 원격 저장소에 전혀 충돌난 부분(겹치는 부분)이 없을 경우에는 동일한 결과를 냅니다.

질문 2.
그 경우엔 충돌이 일어납니다. push되기 전 
"어디어디에 이러이러한 충돌이 있을 것 같아서 우선 push 안했다, 확인해봐라~"하는 메세지가 뜰 거에요. 그걸 확인하시고 pull request를 보내시거나 겹치지 않게 수정하신뒤 다시 push하면 됩니다 :)