본문 바로가기
FE/git

git

by ideal_string 2022. 9. 8.

git은 분산형 버전 관리 시스템이다. 개인은 물론 팀 단위로도 함께 코드를 관리할 수 있다. 무엇보다 레포지토리를 변경하거나 쓰기 권한이 없어도 로컬 개발 환경에서 branch나 commit을 실행할 수 있다.

 

 

git은 리눅스를 개발한 리누스 토르발스가 만들었다. 리눅스와 마찬가지로 git도 오픈 소스다. 누구든지 개발 관련 코드를 다운 받아 살펴 볼 수 있다. 무료 소프트웨어에 민감했던 마이크로소프트 마저 git으로 윈도우를 관리하고 있을 만큼 git은 현재 개발직군에서 필수품이라 해도 무방하다.

 

왜 사용하는가

게임을 하든 어플리케이션을 받은 '업데이트'하는 걸 자주 본다. 그때마다 버전이 몇인지 알림을 볼 수 있는데, 그 버전을 관리하는 시스템이라 생각하면 된다. 사용자에게 오픈하기 전 내부적으로 개발과 업데이트를 지속한다. 기능 단위로 혹은 기술 단위로 저장해 놓으며 개발을 진행할 수 있다. 진행 시 오류가 나거나 의도치 않은 일이 발생할 경우 과거 버전으로 롤백할 수 있기 때문에, git은 개발자에게 중요한 시스템이다. 윈도우로 얘기하면 시스템 복원, 맥OS로 얘기하면 타임머신과 같은 존재다.

git은 작업 폴더는 전체 기록과 각 기록을 추적할 수 있는 정보를 담고 있다. 어플을 개발한다면, 어플 관련 코드를 모두 자기 컴퓨터에 두고 개발하는 것. 작업 후 git 원격 저장소에 발행하는데, 발행 시 다음 버전으로 업로드(push)할 지, 같은 버전에 합칠 지(merge) 결정할 수도 있다. 서브 기능을 별도로 개발할 땐 가지(branch)를 만들어 개발하다 추후 여건에 따라 메인에 합치거나 삭제할 수도 있다. 이 과정을 모두 버전별로 관리하니 개발자에게 git은 중요 요소다.

 

git 특징

1️⃣ 오프라인 작업 가능. 이전 시스템은 오프라인 작업을 할 수 없거나 제한적이었다. 2️⃣ 속도가 빠르다. 각 개발자가 각자 컴퓨터에서 작업하므로 서버 부하가 줄어들기 때문이다. 개발자 컴퓨터가 분산처리 컴퓨터가 되는 셈.  4️⃣ 분산 처리 구조를 유연하게 할 수 있다. 기존에는 서버와 클라이언트 뿐이었지만, git은 중간 서버를 두거나 부서별로 서버를 둘 수 있다. 또한, 서버 장애가 있어도 개발 가능하다. 원격 저장소 뿐만 아니라 로컬 저장소도 갖고 있다. 5️⃣ 가지치기가 쉽고, 병합 문제가 덜 발생한다. 가지치기는 특별한 제약 없이 생성하고 삭제할 수 있다. 이전 시스템에서는 가지치기하나에도 꽤 오랜시간 팀원간 미팅을 해야했다고 한다. 병합의 경우 서버 자체로 작업하는 게 아닌, 서버에서 가져와서 로컬과 병합하고, 이를 다시 업로드하는 형식이기 때문이다. 문제가 아예 없을 수 없으나 예기치 못하게 발생하는 문제 발생 빈도가 낮다. 6️⃣ 스테이징을 지원한다. 커밋하기 전, 즉 작업 후 로컬 저장소에 저장하기 전에 임시 저장 단계가 있다고 이해하면 된다. 작업환경 -> 스테이징 -> 로컬저장소 -> 원격저장소 순으로 흘러간다. 

작업환경과 스테이징, 로컬저장소까지의 모습 (출처 : Git 공식 홈페이지)

시작

VScode 기준. git(https://git-scm.com/)를 컴퓨터에 설치하고, 원격저장소인 github 가입 후 로컬저장소와 연결할 레포지토리를 생성한다. 

이후 작업할 로컬 저장소와 원격 저장소의 레포지토리를 연결시킨다. 저장소 주소는 github에서 볼 수 있다.

VScode 왼쪽에 있는 버튼을 누르면 VScode와 github 레포지토리를 연결할 수 있다. (출처:https://jstar0525.tistory.com/54#2-%EC%9B%90%ED%95%98%EB%8A%94-repository-url-%EC%9E%85%EB%A0%A5)
터미널

이후 VScode의 터미널 에서 git 명령어로 git을 사용할 수 있다(맥의 터미널이나 윈도우의 명령어 프롬프트 등을 통해서도 할 수 있다). 

 

git 기본 명령어

git add <파일이름> 스테이징 영역에 파일 추가.

git add . 스테이징 영역에 변경된 모든 파일 추가.

git commit -m "설명" 스테이징 영역 파일을 로컬 저장소로 저장할 파일들의 설명.

git push origin master 로컬 저장소에 있는 파일을 원격 저장소로 저장. origin은 해당 폴더와 연결된 주소 자체를 뜻한다. 주소를 다시 적지 않아도된다. master는 메인 흐름을 뜻하며 다른 가지에 저장하려면 해당 가지 이름을 설정한다.

git push origin <가지이름> 해당 가지에 파일 업로드

git remote add orgin <원격 서버 주소> 기존 원격저장소가 아닌 서버에서 가져왔을 경우 해당 서버 원격 저장소에 발행.

git checkout -b 가지이름 새로운 가지(branch)를 생성.

git checkout master 메인 가지로 방향을 옮김.

git branch -d 가지이름 가지 삭제

git clone 로컬저장소경로 원격저장소에서 로컬저장소로 복제.

git clone 사용자명@호스트: 원격저장소경로 원격 서버의 저장소로 복제.

git pull origin master 원격 저장소에 있는 최신 파일을 로컬 저장소에 업데이트. 같은 폴더 메인 가지라면 origin master로 pull 가능.

git merge <가지이름> 메인 흐름과 가지 혹은 가지 끼리 등 두가지 버전을 합치고자할 때.

git add <파일이름> 머지 충돌 시 어떤 파일을 기준으로 병합할 것인지 선택.

git diff <원래가지> <비교대상가지> 병합 전 두 파일의 차이를 비교.

 

마무리

git, 들어보긴했었다. 프론트엔드를 공부하기 전부터 개발자인 친구들이 뭐라뭐라 설명해도 하나도 이해하지 못했던 게 git이라 막연한 무서움 같은 두려움을 갖고 있었다. 가랑비에 옷젖는다고 매일 조금씩 사용해보다보니 익숙해지고 있다. 이제 merge가 조금 무서울 뿐, add나 pull은 아무렇지 않게 손이 간다. 다만, 커밋을 잘해야 한다는 말들이 많다. 설명도 그렇고 잔디도 그렇다. 아직은 처음이다보니 익숙해 지는게 먼저라 생각한다. 처음부터 잘하는 사람이 없듯이. 처음에 못한 것조차 나고, 후에 잘하게 될 나도 나니까. 있는 그대로 사용해보고자 한다. 후에 아이디를 다시 파게 되더라도...!

※ 잘못된 내용이 있을 경우 댓글로 알려주세요. 배우고 익히고 수정하겠습니다:)