Git(1)

Lee Jooam·2022년 4월 12일
0

Git을 사용하는 이유

Git은 흔히 버전 관리 시스템(VCS)이라고 한다. 그렇다면 버전을 관리해야할 이유는 무엇일까? 간단하게 말하면 개발하면서 생길 사고를 방지하기 위함인 것 같다.

특정 기능을 개발하다가 심각한 에러가 발생해 롤백해야할 때 깃은 그 위력을 발휘한다. 단순히 이전 버전으로 파일들을 복구시키면 되기 때문이다.

또한 Git은 협업에서도 큰 힘을 발휘하는데 각자 맡은 기능을 나눠 개발할 수 있기 때문이다. 같은 뿌리에서 파생된 가지라면 충돌 상황 등의 예외를 제외하고 다시 하나의 줄기로 병합할 수 있다.

Github

깃으로 관리하는 내 디렉토리가 로컬 저장소라면 깃허브에 올린 내 작업물들은 리모트 저장소라고 할 수 있겠다.

네트워크에 연결된 만큼 다른 사람과 코드를 공유하기도 용이하고 만에 하나 자신의 로컬 저장소가 손상되더라도 pull 기능으로 손쉽게 복구할 수 있다.

원격 저장소를 제공해주는 서비스는 Github을 제외하고도 여럿 있지만 대중적으로 Github가 사용된다.

자주 쓰이는 명령어

init

git init

특정 디렉토리로 경로를 옮기고 다음 명령어를 실행하면 해당 폴더를 git으로 관리하겠다는 의미가 된다.

이 명령어를 먼저 실행 후 사용자의 의도에 따라 버전을 관리해주면 된다.

add, commit
위의 2가지 명령어는 가장 많이 썼던 명령어다. 사실 혼자서 저장소를 관리하고 작업의 크기가 작다면 이 2가지 명령어로도 충분한 기능들을 제공받을 수 있다.

  • add
git add .
git add *
git add [filename]

add는 파일을 staging area로 옮겨준다. staging area란 git directory에 올라가기 전 상태를 말하며, 그곳에 올라온 파일들의 변화는 git이 추적하고 있다.

staging area는 왜 필요할까? 그냥 바로 git directory에 올려버려도 될텐데 말이다. 사실 add의 가장 유용한 기능은 원하는 파일만 staging area 올린다는 것에 있다.

git directory에서 버전이라고 할 수 있는 commit의 단위는 하나의 기능별로 하는 것이 이상적이다.

하지만 개발은 인간이 하는 만큼 모든 면에서 완벽할 수는 없다. 만약 개발 도중 커밋의 시기를 놓친다면? 그렇다면 개발했던 내용들을 지우고 커밋 후 다시 작성해야할까? 다행히 add의 기능으로 그런 상황을 방지할 수 있다.

git add . 과 * 는 현재 디렉토리를 기준으로 모든 파일을 staging area에 올린다. 하지만 둘의 차이는 모르겠다.

asterisk는 dot으로 시작하는 파일을 제외해준다는 문서를 봤는데 vscode로 실험한 결과 아니었다.

  • commit
git commit [-m "[message]"]

commit은 git에서 새로운 버전을 만든다고도 할 수 있다. 기능을 완성하고 해당 기능을 최종적으로 관리하겠다라고 선언하는 명령어가 commit이다.

remote, pull, push, clone
원격 저장소에 올리고 가져오는 기능 수행

git을 원격으로 관리할 때 쓰는 명령어이다. 사전에 git remote add [repo_name][repo_url]로 로컬에 remote 저장소를 등록할 수 있다.

  • pull, clone
git pull [remote_name] [remote_branch_name]
git clone [remote_url]

둘 모두 원격 저장소의 작업물들을 로컬로 가져오는 명령어이다 차이가 있다면 pull은 원격 저장소를 로컬 저장소의 remote 목록에 추가하지 않고, clone은 origin이라는 이름으로 자동 추가된다.

  • push
git push origin [remote_branch_name]

로컬에 있는 작업물을 원격 저장소로 올리는 명령어이다. 해당 작업을 수행하기 위해서는 원격 저장소에 접근할 수 있는 권한이 필요하다.

branch
깃에서 핵심적인 기능 중 하나다. 아직 팀 단위로 깃을 관리해본 적이 없기 때문에 체감은 못했다.

  • git branch
git branch [branch_name]
git branch -d [branch_name]

branch를 생성하고 삭제하는 명령어이다. 보통 기능 단위로 branch를 생성하고 큰 줄기가 되는 branch에 merge하는 식으로 프로젝트가 진행된다.

  • git checkout
git checkout [branch_name]
git checkout -b [branch_name]

이외에도 HEAD의 개념, rebase 등 다양한 내용을 알 수 있었지만 포스팅을 할 만큼 깨닫지는 못했다.

조금 더 조사해보고 추가할 계획이다.

profile
프론트엔드 개발자로 걸어가는 중입니다.

0개의 댓글