github을 이용한 협업상황에서의 질문
지금까지 Git과 Github에 대한 실습을 진행하면서 이전에 살펴보았던 협업구조에 대한 내용은 다음과 같았다.
이전에 살펴보았던 협업의 구조는 다음의 순서로 이루어졌다.
- 우선 팀원의 Github Repository를 나의 Github Repository로 Fork
- 나의 Github Repository로 fork한 프로젝트를 나의 Local Repository로 Clone
- Clone한 프로젝트 내용을 나의 Local Repository 내에서 수정 및 추가
- 해당 프로젝트를 다시 나의 Github Repository로 commit
- 해당 프로젝트를 팀원의 Github Repository로 PR(= Pull Request)
그런데 다음의 과정은 내가 이러한 작업을 진행하는 동안 팀원이 수정한 소스를 push 하지 않은 상황이 전제되어 있었다. 즉, 내가 위의 과정을 수행하는 동안 그 누구도 Fork 해온 프로젝트의 내용을 변경하지 않는다는 의미이다. 그렇다면 만약 위의 과정 1 ~ 4 사이에서 팀원이 소스를 수정하거나 새로운 파일을 추가해서 push를 진행했다면 어떻게 될 까? 그렇게 되면 내가 이전에 fork, clone해서 작업한 프로젝트에는 존재하지 않는 파일이 있거나 소스의 충돌이 발생하게 된다. 그렇다면 이러한 문제를 어떻게 해결해야할 까?
이러한 문제를 해결하기 위해서는 다음과 같은 절차를 거치게 된다.
- 팀원이 새롭게 업데이트 한 Remote Repository를 나의 Local Repository로 Pull
- Pull 하여 Local Repository로 가져온 소스를 수정 또는 추가
- 자신이 새롭게 생성한 프로젝트의 버전에 대하여 팀원에게 PR(= Pull Request)
그림과 설명을 보면 그럴싸 하다. 뭔가 아무런 사전 준비없이 바로 명령만 입력해서 쉽게 해결할 수 있을 것 처럼 보인다. 하지만 위의 상황에서는 1가지 문제점이 존재한다. 우리가 평소에 local repository에서 작업을하고 커밋해서 나의 github repository로 push 할 때에는 local repository와 나의 github repository가 연결되어 있다. 즉, git pull을 하게되면 나의 github repository에서 프로젝트를 가져오는 것이지 팀원의 계정에서 pull 할 수 없는 것이다. 그렇다면 어떻게 해야할 까?
일단 가장먼저 떠오르는 해결책은 git remote remove와 git remote add를 이용해서 pull을 수행하기 전과 후에 local repository에 연결된 원격저장소를 변경해주는 것이다. 조금 원시적인 것 같기는 하지만 타당한 해결책이다. 그렇다면 실습을 통해서 이것이 제대로 수행되는 지 확인해보도록 하자 실습을 위해서 다음의 상황을 가정해두도록 하겠다.
현재 상황은 팀원의 원격저장소(Github repository)에서 project01 이라는 다음의 repository를 fork하고 나의 로컬저장소(local repository) 에서 새로운 버전을 만든 후 나의 원격저장소에 push해서 이제 막 팀원에게 PR을 하려는 상황이다.
그런데 이 상황에서 팀원에게 연락을 받게 되었다. "저의 원격저장소에 새로운 파일들을 추가했습니다. 버전 작업 시에 반영해주세요" 이렇게 되면 지금 막 PR하려고 했던 내용을 PR할 수가 없다! 불가능하다는 뜻이 아니라 의미가 없어진다는 것이다. 내가 생성하여 지금 막 PR하려는 버전은 팀원이 최근에 수정하거나 변경한 내용을 반영하고 있지 않은 상황이기 때문이다.
이를 위해서 팀원이 본인의 원격저장소에 push한 버전과 현재 내가 생성한 버전을 가져와서(fetch) 통합(merge)해야한다. 그래서 이 둘을 한 번에 수행하기 위해서 pull 명령어를 사용할 것이다. 그전에, 앞에서 말했듯이 현재 나의 로컬저장소는 나의 원격저장소와 연결되어 있다.
이제 이를 다음 두 명령을 이용해서 로컬저장소의 연결을 변경해주도록 하겠다.
git remote remove origin
git remote add origin (팀원의 원격저장소 주소)
이제 git pull 을 입력해서 팀원이 최근에 push한 버전을 가져와서 병합해보도록 하자.
다음과 같이 팀원의 원격저장소에서 나의 원격저장소로 성공적으로 pull 한 것을 확인할 수 있다.
그리고 이후에 파일을 확인해보면 팀원이 추가했던 README.md 파일을 성공적으로 pull한 것을 확인할 수 있다. 이제 다시 나의 github repository로 연결을 바꿔줘야 하는 데 이는 위에서 제시한 git remote를 그대로 활용하면 된다. 연결을 다시 복원해주지 않으면 pull한 프로젝트를 나의 github에 pull할 수 없기 때문에 해당 과정을 반드시 거쳐야 한다. 이후의 과정은 이전에 했던 실습과 동일하게 수행하면 되겠다.(커밋후 push, PR)
'Tools > Git, Github' 카테고리의 다른 글
Github Page란? (0) | 2021.01.22 |
---|---|
git rebase (0) | 2021.01.20 |
git revert, reset (0) | 2021.01.19 |
Git 실습 시나리오 따라해보기(3) (0) | 2021.01.18 |
Git 실습 시나리오 따라해보기(2) (0) | 2021.01.18 |
댓글
이 글 공유하기
다른 글
-
Github Page란?
Github Page란?
2021.01.22 -
git rebase
git rebase
2021.01.20 -
git revert, reset
git revert, reset
2021.01.19 -
Git 실습 시나리오 따라해보기(3)
Git 실습 시나리오 따라해보기(3)
2021.01.18