[GIT] Git을 사용하는 이유, 여러 기능들
Elice SW엔지니어 트랙 1기 첫 팀 프로젝트가 끝났다. 여러 팀원들과 함께 GIT을 사용해서 협업했는데 , GIT에 대한 이해가 부족한것 같아서 공부하고 그 내용을 정리해 보려고 한다.
0. GIT이란 ?
- 간단하게 말하면 버전 관리 시스템이다. 소프트웨어를 개발할 때 소스코드들을 효과적으로 관리해주는 도구이다.
- SVN 등등의 다른 도구들도 있지만, 최근에는 역시 GIT을 가장 많이 , 가장 방대하고 효과적으로 사용하는 중이다.
- 기본적으로 소스코드들을 저장소와 여러 로컬 페이지에서 관리한다. 이 말은, 소스코드를 이메일 등등을 사용해서 직접 주고받는 것이 아니라 로컬에서 개발하기 때문에 여러 명이 동시에 작업하는 것이 가능하다 !! (가장 큰 장점 중 하나)
- 인터넷이 연결되지 않은 곳에서도 개발이 가능하고 저장소가 날아가 버려도 로컬저장소의 소스코드로 복구할 수 있다. - 버전 관리 시스템 이라는 이름에서 알 수 있듯이, 소스코드를 버전으로 관리해서 예전의 특정 시점으로 돌리거나 특정 시점과의 소스코드를 비교하는 등이 가능하다.
-> 효율적인 협업이 가능하다 !!
1. GIT Branch / merge
- Branch : 독립적으로 작업을 진행하기 위한 가지. 각각 Branch는 다른 Branch의 영향을 받지 않는다.
- Main 브랜치에서는 배포할 수 있는 수준의 안정적인 코드 , Topic 브랜치는 기능 추가나 버느 수정과 같은 단위 작업을 위한 브랜치
- 독립적으로 작업을 한 후 메인 가지에 합쳐서 코드를 완성할 수 있음 -> 여러 개발자들이 독립적으로 개발하고 합칠 수 있음 -> 효과적인 협업 가능!
- GIT branch 생성, merge
// 새로운 브랜치 생성
$ git branch new_branch
// 기본 master에서 new_branch라는 가지가 새로 생성!
$ git branch
// 현재의 branch를 확인하는 명령어
$ git checkout new_branch
// new_branch로 브랜치 전환
// 브랜치 전환 뿐만 아니라 snapshot(특정 시점의 코드)을 넘나드는데도 사용 가능
// 브랜치 합병(merge)
// 가장 먼저 합병할 브랜치의 기본 가지(master)로 이동합니다
$ git checkout master
$ git merge new_branch
// new_branch를 master에 합병(합치기!)
$ git branch --merged
// merge된 브랜치 확인 -> new_branch 확인 가능
$ git branch -d new_branch
// 사용을 마친 브랜치 삭제
// merge conflict
// merge한 두 브랜치에서 같은 파일을 변경했을 때 충돌이 발생!
// 충돌한 파일을 확인 후 충돌을 수정하고 merge!
2. GIT 통신
- 세 가지 상태 : 로컬 저장소 / 스테이징 / 원격 저장소
- 원격 저장소 : 인터넷 또는 네트워크에 저장되는 저장소
- 로컬 저장소 : 개발자의 컴퓨터에 저장되는 저장소
- 스테이징 : 로컬 저장소에서 작업/변경한 파일을 원격 저장소에 올리기 전에 저장하는 공간으로 , 커밋하게 되면 스테이징 되어있는 파일들이 원격 저장소에 반영된다.
-> 로컬에서 개발한 소스코드를 원격 저장소에 저장하고 가져오는 시스템. 로컬에서 각각 개발하게 되므로 인터넷이 안 되어도 개발이 가능하고 , 각자 따로 개발이 가능해서 협업의 효율 증가 !
// 원격 저장소 url로 받아오기
$ git clone <원격 저장소 url>
$ git fetch
// 원격 저장소에서 데이터를 가져오는 명령어
$ git pull
// 원격 저장소에서 데이터를 가져와 로컬 데이터와 병합하는 명령어
// fetch 이후 merge까지 한번에 해주는 명령어
$ git add <파일 이름>
// 변경된 파일을 준비영역으로 보내는 명령어
$ git add .
// 현재 폴더를 준비영역으로 보내는 명령어
$ git status
// 스테이징된 파일을 볼 수 있는 명령어, 추가로 어떤 파일이 변경되었는지 확인 가능
$ git commit -m <메세지>
// 스테이징된 파일을 저장소에 반영하는 명령어. 메세지로 간략한 내용을 적을 수 있다.
$ git push
// 로컬 저장소에서 작업한 내용을 원격 저장소에 반영하는 명령어
// 다른 사람이 먼저 push한 상태에서는 push가 불가능하므로 , 다른 사람이 작업한 것을
// merge한 후 , push 할 것!
3. 공부 후 느낀점
사실 그 동안은 Github Desktop을 사용해서 명령어를 크게 신경쓰지 않았는데, Gitlab을 사용하다보니까 명령어를 사용해야하는 상황이 많이 발생했다. 그때 몰랐던 부분이 많아서 헤맸는데, 2차 프로젝트때는 덜 헷갈리지 않을까 생각한다. 또한 그 동안에는 git에 대한 이해가 없이 그저 pull과 push만 사용해서 "저장" 만 했다면, 공부 이후에는 내가 작업했던 버전을 보고 코드를 비교해보니까 git이 상상 이상으로 효율적인 도구구나 라는 생각이 들었다. 괜히 시니어 개발자분들이 git이 중요하다고 입이 닳도록 말하시는게 아니구나, 다 이유가 있다는 것을 알았다. 아직도 겉핥기인 부분이 있지만 더욱 공부해서 git을 자유롭게 사용한다면 이후 프로젝트, 또 현업으로 들어가서 협업을 할 때 많은 도움이 될 것 같다.
프로젝트 중 잠깐 사용한 git issue 기능이 있었는데, 따로 더 공부한 후에 공부 내용을 추가하도록 하겠다.