본문 바로가기
Team Project (국비)/Team Project 메모

GIT 메모

by Hwanii_ 2023. 6. 25.
728x90

clone >>

리포지토리와 로컬 폴더를 동기화.

(시점도 동기화 시킨다)

 

commit >>

내 로컬 git에 변경 사항을 저장.

 

push >>

로컬 git에 커밋된 변경 사항을 온라인 리포지토리에 저장.

 

pull >>

온라인 리포지토리에 저장된 변경 사항을 당겨 온다. ( 다운로드 한다)

 

 

 

누군가가 업데이트를 해서 시점이 달라졌어.

(버전 정보가 달라졌어)

 

그때, 만약 내가 새로운 버전을 업데이트 하지 않았을 때, (동기화를 하지 않았을 때)

내가 그때, 내가 가지고 있는 버전 (구버전) 을 push 하면 충돌이 일어난다.

 

그래서 충돌이 일어나지 않게 하려면,

서버에 누군가 최신 버전을 올린것을 pull 해서 (땡겨와서),

나의 파일을 최신버전으로 바꾸고 나서, 업데이트를 하고 싶으면 하고 한 후에,

서버에 push 해야지 충돌이 나지 않는다.

 

 

 

그런데 문제는, 다음과 같다.

내가 만약에, Model 파트 어느 DAO 파일을 수정 하고 있다고 치자.

근데, 내 팀도 Model 파트 어느 DAO 파일을 수정하는데,

하필 나와 팀원의 파일이 완전 동일한 파일이라고 가정해보자.

 

이때, 팀원이 나보다 먼저 동일한 파일을 수정하고 서버에 push를 해버리면,

내가 수정하고 있는 동일한 파일은 더이상 최신 버전이 아니기에

서버에 push를 할 수 없게 된다..

 

왜냐하면, push랑 pull은 덮어 씌워지는 개념이기 때문이다.

 

 

 

그래서, 이런 문제점을 해결 하기 위해 merge (머지) 라는 개념이 있다.

merge >> 사전적 의미로는 병합을 의미 한다.

 

한 파일의 모든 부분의 코드가 아니라,

변경 사항 (수정한 부분) 을 자동으로 인식해서,

변경된 부분을 잘 기존의 코드와 병합 시킨다.

 

원본에다가 수정본을 덮어씌우는 개념이 아니라,

 

원본에다가 수정된 부분만 추가 되는 것이다.

 

이때, branch (브랜치) 를 상호 병합 한다 라고 말할 수 있다.

 

위의 변경사항 으로는

단순 코드 수정,

신규 코드 추가,

기존 코드 삭제,

등이 있다.

 

 

 

branch >> 사전적 의미로는 나뭇가지를 의미 한다.

 

시점을 나눔으로써, 기존 리포지토리를 망가뜨리지 않고,

병렬적으로 개발할 수 있도록 하는 개념 이다.

 

그래서 코드의 충돌을 방지하기 위해서는,

branch를 활용해서 병렬적으로 개발하도록 해야 한다.

 

(시점을 나눈다는 의미가, 다중우주 느낌.. 평행 우주)

 

이 충돌이 일어나는 전제 예시를

같은 파일의 경우로 예시를 들었는데,

 

안정성을 위해서 다른 파일을 수정할 때도, merge와 branch 개념을 가지고

개발을 하는게 좋을듯 하다.

반응형