안녕하세요 임오군란과 민씨팀의 "민" 입니다.
오늘은 버전관리와 개발, 협업에 있어서 빠질 수 없는 "Git"에 대해서 알아보도록 하겠습니다.
Git을 사용하는 이유
Git을 사용하는 이유는 여러가지가 있습니다.
Git은 약 5천만명의 개발자들이 모여드는 커뮤니티이기도 하지만 Git을 이용하여 개인저장소를 만드는 등 여러가지 이유가 있을 수 있습니다.
깃을 사용하는 이유는 크게 버전관리, 소스코드의 저장소, 협업 등등 많은 이유가 있지만 오늘은 버전관리에 대해서 조금 초점을 맞추겠습니다.
우리는 버전 관리를 함으로써 소스코드를 효과적으로 관리하고 이전 상태로 회귀함으로써 무언가가 잘못되었을 때 복구가 가능합니다.
또한 오픈소스 관점으로써는 누가 소스코드를 바꾸었는지 추적하고 바뀐 소스코드에 문제가 생겼을 때 알맞은 버전으로 다시 원상복구를 할 수 있습니다. 또한 오픈소스 작업 (예로 들면 Linux는 약 천만여명의 개발자들이 모여서 개발에 참여)에는 많은 contributor들이 모여서 하는 대규모 작업이기 때문에 Git을 사용하여 버전 관리를 하는 것이 좀 더 안전하고 효율적입니다.
branch와 tag
그렇다면 버전 관리를 할 때 어떤 방식이 있을까요? 버전 관리를 효과적으로 알기 앞서 Branch와 git tag를 먼저 알면 좋을것 같습니다
branch
같은 폴더, 다른 저장소
branch는 분기점입니다. master (내부생성) branch와 production branch는 같은 폴더는 일 수나 전혀 다른 환경에서 작업하는 것입니다.
그렇다면 branch는 어떨 때 좋을까요?
1. 원본을 건드리지 않고 새 작업을 할 필요가 있음.
2. 압축파일을 따로 저장하고 싶지 않음.
3. 다른 폴더로 복사 작업하지 않아도 됨.
tag
꼬리표
git tag는 작업한 작업물의 상징적인 이름입니다.
tag는 특정 log 히스토리에 이름을 다는 것입니다. 소스코드의 버전을 관리할 때 매우 유용히 사용될 수 있습니다.
다만 tag는 또 하나의 별칭을 정하는 것이지 branch처럼 원본과 격리된 환경을 제공하지 않습니다.
git checkout <tag> 명령어로 특정 태그의 버전으로 돌아갈 수 있습니다.
merge와 rebase
여러분들은 github를 이용할 때 merge와 rebase 어떤 방식을 더 선호하나요?
merge와 rebase 명령어 중 많은 논쟁이 있습니다.
왜냐하면 이 두 명령어 둘 다 병합을 위해 사용하는 명령어이기 때문입니다.
이는 많은 git이용자들 사이에서도 많은 취향이 갈리는 부분이라 이렇다할 정답은 없지만 지금부터 merge와 rebase의
차이점을 알아보고 알맞은 명령어를 선택하여 사용하는 것은 어떨까요?
merge
merge 명령어는 각 branch에서 작업한 내용들을 최종적으로 병합하는 명령어입니다.
git merge 명령어는 한 branch에서 다른 branch로의 변경사항을 반영시켜 두 branch를 합치는 명령어 입니다.
git merge는 branch에 대한 로그기록이 보존되어 있어 commit log를 그대로 볼 수 있습니다.
다만 이를 위해서 log를 적절히 활용해야하고 commit message를 잘 활용해야만 합니다. 그렇지 않으면,,
이렇게 많은 분기점이 생겨 충돌이 일어나고 나중에는 어떤 지점이 BASE인지 모르는 상태가 발생하게 됩니다.
rebase
git rebase는 git merge와 매우 유사하지만 이러한 단점을 극복하기 위해 생겨난 명령어입니다.
master branch에 commit 1, commit2, commit3이 있고 function branch가 commit A와 B로 커밋된 프로젝트가 있다고 보겠습니다. git rebase 작업을 수행하면 커밋 A와 B가 다시 base가 됩니다.(여기서 base란 주 작업 지점입니다.) 커밋 4와 5로 마스터 브랜치에 추가하면 function branch에 대한 로그가 없어 좀 더 사용자 친화적입니다.
하지만 언제 branch가 이동되었고 프로젝트가 전환되었는지에 대한 로그 기록이 없어 추적이 어렵습니다.
git merge | git rebase |
Brach 두개를 서로 하나의 branch로 만듬 | 한 Branch에서 다른 Branch로 base를 바꾸어 추가 |
각 branch마다 로그가 존재하여 추적 가능 | 각 branch 로그 추적 불가 (선형적) |
공유하는 brach일 때 사용 | Private한 branch일 때 사용 |
정리하자면 오픈소스 같은 작업에서는 merge를 많이 사용하고 팀 프로젝트에서는 rebase를 많이 사용합니다.
왜냐하면 merge는 history의 상세한 추적이 가능하고 rebase는 비교적 간결한 history를 추구하기 때문입니다.
왜냐하면 오픈소스 같은 프로젝트에서 누군가의 history를 임의로 조작하게 만드는 rebase명령어는 좋지 못하기 때문입니다.
출처: https://www.edureka.co/blog/git-rebase-vs-merge/
Git Rebase vs Git Merge - Which is better? - Edureka
In this git rebase vs git merge we will understand how does git work, difference between git rebase and git merge with code examples!
www.edureka.co
'IT KNOWLEDGE' 카테고리의 다른 글
인프라 엔지니어 관점에서 바라봐야할 자원 - 스토리지 (0) | 2022.08.01 |
---|---|
OCP에 대해 알아보자! (0) | 2022.08.01 |
CMP (0) | 2022.07.22 |
CCNA 자격증에 대해 알아봅시다 (0) | 2022.07.21 |
[Python 기초] 딕셔너리 (0) | 2022.07.20 |
댓글