본문 바로가기

git 필요한것만 익히고 바로 시작하자!

by Kstyle83 2022. 12. 22.
반응형

git은 왜 필수가 되었나?

개발은 혼자하더라도 어떻게 소스가 바뀌었는지 언제 바뀌었는지 알 필요가 있다. (버전관리)

그리고 여럿이서 협업을 하게 되는 경우가 많은데 이 때는 동일한 프로젝트 소스를 여러 개발자가 수정하게 된다. (협업)

위와 같은 상황에서 편하게 개발하려고 사용하는 것이다.

 

필수 기본 요소

commit과 branch가 있다.

그냥 쉽게 얘기하면 commit은 수정된 이력을 담고 있다. 바로 전 커밋과 비교해서 어디가 어떻게 바뀌었는지를 보여준다.

그리고 branch는 그 커밋들의 꾸러미이다. 

 

이미 여러 브랜치 전략들이 있다.

git flow github flow 등 구글링해보면 정보가 차고 넘친다. 그래서 이 글에서는 그걸 설명하지 않고 간단히 요점만 이야기하고 넘어가려 한다. (필요하면 구글링해서 개념을 이해해보는것도 좋다.)

요약하면 그냥 git을 효율적으로 사용하기 위한 방법론같은거다.

master만 가지고 사용해도 되고 그냥 branch만 아무렇게나 만들고 머지해도 기능에 문제는 없지만 여러가지 상황에 따라 사용 효율이 떨어질 수 있기 때문에 니즈에 맞게 적절한 전략 선택과 변형이 필요하다. (남들이 좋다고 해서 그 모든게 내 현재 상황에도 좋다고는 할 수 없다.)

 

제일 많이 쓰는 커멘드들 소개 

add, commit, fetch, pull, push, checkout, branch, stash, rebase, merge, reset, cheery-pick 등이 있다. 쓰다보면 아마 다 익히게 될 것이다.

처음부터 공부하듯이 하지 말고 사용하면서 익히는게 제일 좋다.

만약 혼자 시작한다면 이중 add, commit, fetch, pull, push, checkout, merge를 우선 보는게 좋다.

이것만 익혀도 수정, 커밋, 풀, 푸시, 브랜치 생성, 브랜치 변경, 브랜치 합치기가 가능해지니 먼저 익혀두자. 

대부분 IDE에서 제공하는 git 기능으로 진행할테니 개념만 알아두어도 좋다.

 

원치 않는 불청객 conflict, 그리고 이 불청객을 처리하기 위한 또다른 학습

merge를 한다는 것은 서로 commit이 다른 branch들을 합친다는 뜻이다.

commit이 다른데 동일한 파일을 고쳤다. 근데 git은 이중에 뭐가 정답인지 모른다.

그러면 그거를 사용자에게 직접 선택하라고 안내하고는 잠시 멈춘다.

이 상황이 conflict다.

이때는 두개의 커밋의 정보를 보여주는 메세지가 소스에 아예 박혀있다.

그래서 그것을 정리해주고 commit을 한 후 merge를 계속해야 한다.

 

수정을 하려고 파일을 열어보면 크게 두가지 상황을 만난다.

첫째로 복잡한 로직을 서로 다른사람이 고쳤다면 어떤게 최종 형태에 적합한 코드인지 상의를 해야 하는 상황이 생길 수 있다. 이때는 상의하고 최종 코드를 남겨서 커밋하면 된다.

둘쨰로 merge를 진행하는 개발자가 스스로 판단할 수 있는 상황이다. 그럼 혼자 고쳐서 작업을 완료해도 된다.

 

피할 수 있으면 피하자

git을 쓰다보면 무조건 마주칠 수 밖에 없는 conflict지만 피할 수 있는 방법은 있다.

실제 개발 단계에서 작업 단위를 잘 쪼개는 것. 

다시 말하면 똑같은 파일을 최대한 동시에 수정하지 않게 작업 단위를 쪼개서 나누는 것이다.

 

기본적으로 이정도만 해도 git을 사용하는데 문제는 없다.

심화과정은 더 많다. history graph가 꼬이지 않고 아름답게 만드는 방법이라던가 더 우아하게 사용하는 법. 누군가가 똥을 싸질러놔서 망가진 repo를 복구하는 방법 등 여러가지 상황들이 올 수 있다. 이때는 위에서 주로 얘기하지 않은 명령어들에 여러 옵션을 줘서 여러 방법으로 처리를 하게 된다.

하지만 그건 앞서 위에 이야기한 기본 기능들을 사용하면서 개념을 이해하고 나면 어떻게 처리해야 할지 알게된다.그때 방법을 생각하거나 서칭해서 처리해도 무방하다. 이런것까지 완벽하게 먼저 공부해야만 git을 사용할 수 있는게 아니다.

 

반응형