Git 사용시 주의점 [20210904]

Jungsoo kim·2021년 9월 4일
2

wecode

목록 보기
19/30

  이번 블로그 글을 작성하기에 앞서, 간단하게 이야기 해야할 것이 있어 먼저 하고 넘어가려고 한다.

  여태까지는 내가 배운 내용들을 시간에따라 서술하는 글을 써왔다. 복습효과도 있으며, 시간이 지났을 때 관련 내용을 참고하기 위해서였다.
물론 이런 방식으로 블로그를 작성하는 것도 충분히 좋은 방식이지만 앞으로는 블로그에 작성하는 내용에 변화를 주려고 한다. 어떤 내용에 대해서 작성할지 대략적으로 설명하자면, 프로젝트 및 코딩을 하는 과정에서 문제에 맞닿뜨렸을 때, 그 문제를 해결해 나가는 과정에 대해 서술하려고 한다. 왠만하면 문제가 해결된 것을 중점으로 하려고 하지만, 가끔은 해결하지 못한 내용들을 정리할 때도 있을 것이라 생각한다.

  부가 설명이 너무 길었다. 이번에 작성하려고 하는 내용은 여러명이 협업하여 Git을 사용할 때 주의 점이다.
실제로 본인이 간단한 클론 프로젝트를 하는 도중에 직접 겪었던 문제이며, 왜 이런 문제가 발생하는지와 문제를 해결하기 위해서는 어떻게 해야하는지에 대해 간단하게 서술하려고 한다.

<목차>
1. 문제점
2. 문제가 발생하는 이유
3. 해결 방법
4. 마무리하며

1. 문제점

현재 회원가입, 로그인 기능 등이 있는 사이트의 클론 프로젝트를 진행하고 있다. 아직 실력이 많이 부족하기 때문에 팀을 구성해서 함께 프로젝트를 진행하고 있는데, Git을 Push, Pull하는 과정에서 많은 문제가 발생하였다.

그 중에 하나에 대해서 말하려고 하는데 그것은 Complict이다.
Complict는 여러 개의 파일을 병합 (Merge, Rebase)하는 과정에서 발생하는 문제이다.

예를 들어 A, B, C라는 프로그래머가 함께 하나의 프로젝트를 수행한다고 가정하자.

이 프로젝트에는 3개의 개별 Application(기능)이 있으며, A, B, C 는 각각 하나의 기능을 구현하기로 했다.

A, B, C의 프로그래머는 동시에 작업에 착수하였으나, A가 가장 빨리 작업을 마무리하여 Git hub의 branch에 push를 했다. 작업을 확인한 결과 따로 수정할 부분이 없어서 Git hub main에 Merge가 되었다.

그 후에 B의 작업이 끝나서 Git hub의 branch로 push를 하려고 했는데, Complict가 발생하였다.

2. 문제가 발생하는 이유

  문제가 발생하는 이유에 대해서 알아보자.
A 프로그래머가 push를 한 시점에는 Git hub에는 아무런 파일이 올라와 있지 않았다. 그렇기 때문에 Merge를 했을 때도 아무런 문제가 없이 바로 성공하였다. 그러나, B가 Push를 한 시점에는 A가 작업한 내용이 Git hub에 반영되어 있다. 그래서 만약 B가 Push를 하는 시점에 Git hub과 B의 로컬 brunch에 같은 이름의 폴더 & 파일이 있다면, 그 내용인 모두 동일해야 한다.

  왜냐하면, Git hub에는 이미 A가 작성한 내용이 반영되어 있는데 B가 push한 파일에는 A가 작성한 내용과 다른 내용이 반영되어 있으면 충돌이 일어나기 때문이다.

예를 들면 이런 상황이 있을 수 있다. A는 Setting.py에 데이터 베이스의 이름을 starbucks라고 저장을해서 Git hub에 push 하였고, Merge 되었다. 그러나, B는 Setting.py에 데이터 베이스를 starbuck라고 저장을 했다. 그러면 두 개의 내용이 달라 충돌이 발생하는 것이다.

3. 해결 방법

  위의 문제에 대한 대처는 다양한 해결법이 존재할 수 있다고 생각하지만, 우리 팀이 고안하여 사용하는 방법은 아래와 같다.

  1. A, B, C는 각자 예비 Branch를 생성한다. ex) "proto/jungsoo-login" branch.
  2. 만들어진 예비 브런치에 작업을 시작한다.
  3. 가장 먼저 작업이 완료되어 Merge가 가능한 사람이 생기면 push를 보내 Merge 시킨다.
  4. Merge가 된 시점에 B, C는 로컬의 main 브런치로 이동하여 Merge 된 것을 Git hub으로 부터 pull한다.
  5. 그 후에 새로운 작업 브런치를 생성한다. ex) "feature/jungsoo-login"
  6. B, C는 여태까지 작업한 내용을 text 편집기에 복사, 붙여넣기를 하여 저장한다.
  7. 새로 생성한 작업 브런치에 복사, 붙여넣기 한 코드를 다시 옮긴다.

이와 같은 방식을 사용하게 되면, Merge가 완료된 상태를 pull하여 그 위에 자신의 프로젝트를 더해가기 때문에 적어도 내용이 달라서 Complict가 발생하는 것은 예방할 수 있다.

4. 마무리

  솔직히 아직도 Git & Git Hub을 사용하는데 많은 어려움이 있고, 완벽하게 이해하지 못한 것도 많다. 물론 다른 더 좋은 방법이 존재할거라 생각한다. 그래도 이 글은 나와 같은 사람들에게 조금이나마 도움이 될 수 있었으면 하기 때문에 작성하는 것이며, 작성 중 문제를 해결했던 과정을 한 번 더 복기할 수 있어서 나에게도 도움이 되는 것 같다. 그럼 이만...

profile
어렵지만 꾸준히 차근차근 해 나가자~!

1개의 댓글

comment-user-thumbnail
2021년 9월 4일

정수님 화이팅!

답글 달기