Git - 소개 및 상황별 사용법 (1)
이번 포스트에서는 개발 업무시 가장 필수라 할 수 있는 Git에 대해 간단한 소개와 상황별 Git 사용법에 대해서 알아보겠습니다.
Git은 개발에서 가장 중요한 환경중에 하나입니다. 개발을 하시는 분들이라면 대부분은 git을 사용하시거나, 사용해본적이 있으실 겁니다.
제가 처음 git을 접한건 이전 회사에서 SourceTree 라는 프로그램을 사용하면서 시작되었습니다.
큰 프로젝트를 진행하면서 소스관리를 위해 Git을 도입했고, 처음 사용하는 개발자들이 많았기에 처음부터 SourceTree 라는 Gui를 사용하여 소스관리 및 개발을 진행하였습니다.
Git을 사용하기 이전에는 FTP 저장소의 개발 소스들을 다수의 개발자들이 직접 접근해 사용하였고, 개발시에 의도치 않은 변경, 삭제 등의 문제로 여러 문제점이 발생했었습니다.
결국, 개발 및 소스관리의 문제점을 해결하기 위해 Source Tree 를 이용해 Git을 사용하게 되었고 점차 SourceTree 없이 Git을 사용해 개발 진행 및 소스관리를 진행하게 되었습니다.
Git 이란?
혹시나 Git을 모르시는 분들도 있을테니 간단하게 설명드리겠습니다.
Git은 2005년 리누스 토르발스가 처음 개발하였으며, 2005년부터 지금까지 주니오 하마노가 소프트웨어의 유지보수를 맡고 있습니다.
Git은 컴퓨터 파일의 변경사항을 추적하고 여려 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 버전 관리 시스템입니다. 소프트웨어 개발에서 소스 코드를 관리하며, 변경사항을 지속적으로 추적하기 위해 사용할 수 있습니다.
Git은 많은 GUI를 지원하는데 여러분도 알고있는 GitHub Desktop, Source Tree 등이 있습니다.
대부분 개발환경에는 Git이 기본적으로 설치되어 있겠지만, 처음 사용하시는 분들을 위해 간단하게 Git을 설치하고 사용하는 방법에 대해 간략하게 정리해 보겠습니다.
Git 설치 및 설정
먼저 Git을 설치해보겠습니다.
$ brew install git
또는 직접 홈페이지에 가서 설치파일을 다운로드 받아 설치해도 됩니다.
- Git 설치: https://git-scm.com
설치가 정상적으로 완료되었다면, 초기 Git 계정을 설정해줘야 합니다. 사용자의 Local 디렉토리에서 Git 저장소로 소스를 생성/변경 후 Push 하려면 계정명과 패스워드를 계속 입력해야하는 번거로움이 있습니다. 초기에 계정 설정을 한번만 해주면 계속 유지되기 때문에 Git 계정을 해주는 것이 편리합니다.
$ git config —global user.name ‘userName’ # git 사용자 이름
$ git config —global user.email ‘user@email.com’ # git 사용자 이메일
만약 프로젝트마다 다른 이름과 이메일을 사용하고 싶다면 —global 옵션을 제거하고 설정하시면 됩니다.
상황별 Git 명령어
#프로젝트 git 초기화 - git init
git 프로젝트에서 clone 을 받은 프로젝트가 아니라면 사용자는 프로젝트 소스에서 git 환경을 세팅해야합니다. 만약 사용자의 프로젝트가 myGitTest 라는 디렉터리 안에 설치되어있고, 이 프로젝트를 특정 git소스 저장소와 연결이 필요한 상황이 있을 수 있습니다. 이럴때 사용하는 git 명령어는 init 입니다.
$ cd myGitTest # 프로젝트 디렉터리로 이동
$ git init # git 초기화
너무 간단하게 git 초기화가 끝났습니다.
#git 저장소와 프로젝트 연결 - git remote add
git 프로젝트에서 clone 을 받은 프로젝트가 아니라면 사용자는 프로젝트 소스에서 git 저장소를 직접 설정해줘야 합니다. 만약 사용자의 소스를 원격저장소와 연동하려면 사전 협의된 git 저장소의 원격 주소를 Local 저장소에 연결해 주세요.
$ git remote -v
# 먼저 기존 git remote 주소를 확인합니다.
# 기존 연결된 remote 주소가 없다면..
$ git remote add origin https://github.com/myGit/myGitTest.git
# https://github.com/myGit/myGitTest.git라는 저장소 주소를 추가합니다.
#git 원격 저장소에서 소스 내려 받기 - git clone
자신의 git 저장소 또는 협업 git 저장소의 원격 저장소에서 프로젝트 소스를 Local 저장소로 Clone 받을 수 있습니다. git 원격 저장소에서 Clone 으로 소스를 내려받는다면 git init 설정값을 그대로 내려받기 때문에 git remote add 과정을 진행할 필요가 없습니다.
$ git clone https://github.com/myGit/myGitTest.git
# https://github.com/myGit/myGitTest.git라는 소스를 local 저장소에 내려받습니다.
# 내려받기를 시작하면 myGitTest 라는 디렉터리가 생기고 그 안에 소스들이 저장됩니다.
# 만약 다른 디렉터리명으로 내려받고 싶다면 명령어 뒤에 사용할 디렉터리 명을 지정하면 됩니다.
# ex: git clone https://github.com/myGit/myGitTest.git myProject
$ cd myGitTest
$ git remote -v
# 내려받은 디렉터리로 이동해 정상적으로 소스를 내려받았는지 확인합니다.
#branch 이동 또는 신규 branch 생성 및 이동 - git checkout
Local 저장소에 소스를 내려받으면 기본적으로 master branch 로 설정되어 있습니다. 기본적으로 master branch 는 가장 중요한 branch 이므로 직접 master branch 에서 소스를 수정하는 것을 피하세요. 개발을 진행하기 위해 다른 branch 로 이동하거나 사용자 개발용 신규 branch를 생성해서 작업을 진행합니다.
$ git checkout develop
# 원격 저장소에서 소스를 내려받으면 기본 master branch를 바라봅니다.
# 만약 이미 원격 저장소에 develop 이란 branch가 있다면 사용할 수 있습니다.
$ git checkout -b feature/myGitTest
# 만약 사용자가 새로운 개발 branch를 생성해서 작업하고 싶다면
# -b 옵션을 사용해서 한번에 branch 생성 및 이동을 할 수 있습니다.
$ git branch feature/myGitTest
# 신규 브랜치를 생성하는 기본 명령어는 git branch 입니다.
# 신규 branch 를 생성하지만 이동하진 않습니다.
#수정된 파일 스테이징 영역에 추가 - git add
소스를 수정하면 git에 수정된 소스를 push하기위해 몇가지 과정이 필요합니다. 먼저 수정된 파일이 있다면 수정된 파일을 워킹 디렉터리에서 스테이징 영역에 추가시켜야 합니다. 스테이징 영역은 git을 commit 하고 push 하기위해 소스를 관리하는 영역입니다.
$ git add index.js # or git add .
# git add {수정된 파일명}을 적어줍니다.
# 만약 수정된 모든 파일을 적용하려면 . 을 사용해 스테이징 영역에 추가할 수 있습니다.
#commit 메시지 작성 - git commit
수정된 소스를 git add 를 통해 스테이징 영역에 추가했다면, push를 하기위해 commit 명령어를 입력합니다.
$ git commit -m 'feature/myGitTest index.js 수정'
# -m 옵션을 사용해 commit시 메시지를 입력할 수 있습니다.
#원격 저장소에 파일 적용 - git push
git add, git commit 의 과정을 완료했다면 마지막으로 원격저장소에 수정된 소스를 push를 통해 적용합니다. push 시에는 사용자의 작업 branch에 소스가 적용됩니다.
$ git push origin feature/myGitTest
# feature/myGitTest 라는 사용자의 원격 저장소 branch 에 소스를 push 합니다.
# git push 만 사용해도 현재 브랜치에 자동으로 push 됩니다.
#원격 저장소에서 최신 소스 내려받기 - git pull
협업을 하고 있거나 사용자가 여러 개발 환경에서 작업을 하다보면 원격 저장소에 적용된 최신 소스를 적용할 필요가 있습니다.
새로운 소스를 자신의 Local 저장소에 적용해서 개발하지 않으면 나중에 다른 사용자들이 수정한 소스와 충돌(conflict)될 수 있습니다.
항상 git pull 을 먼저 진행하고 자신의 수정작업을 진행하세요.
$ git pull
# 원격 저장소에 적용된 최신 소스를 Local 저장소에 적용합니다.
# pull 과정에서 소스 충돌이 발생할 수 있으며, 충돌을 Local 에서 해결하세요.
#다른 brach의 소스와 병합하기 - git merge
협업을 진행시 다른 branch의 소스를 나의 소스와 병합하거나 나의 소스를 다른 branch에 병합해야하는 상황이 생긴다면 git merge 를 사용합니다.
병합 과정에서 소스 충돌이 발생할 수 있으며 충돌 발생시에는 충돌 원인을 파악하고 해결해야 합니다.
$ git merge feature/test
# 현재 branch : feature/myGitTest
# 사용자의 feature/myGitTest branch에
# 다른 사용자의 feature/test branch 소스를 병합합니다.
$ git merge feature/myGitTest
# 현재 branch : master or develop
# 보통 master, develop 등 브랜치는 병합의 대상이 되는 중요한 branch 입니다.
# 사용자가 만든 개발 branch의 소스를 master 또는 develop branch 로 병합할때 사용합니다.
#Local branch 삭제하기 - git branch -d
자신의 Local 에서 개발이 완료되어 더이상 branch를 사용하지 않거나, 다른 이유로 branch를 삭제해야할 경우, -d 옵션을 사용하여 삭제할 수 있습니다.
삭제를 진행할때 항상 주의하세요. 협업중이라면 branch 삭제는 협의된 상태에서 진행해야 합니다.
$ git branch -d feature/myGitTest
# 사용자의 branch를 -d 옵션을 사용해 삭제합니다.
$ git branch -D feature/myGitTest
# 만약에 충돌로 인해 삭제가 안된다면 -D 옵션으로
# 강제 삭제를 진행할 수 있습니다.
#원격 저장소 branch 삭제하기 - git branch push :branch
자신의 Local 에서 branch를 삭제했다면 원격 저장소도 동일하게 삭제가 필요할때 간단하게 push 를 통해 삭제할 수 있습니다.
삭제를 진행할때 항상 주의하세요. 협업중이라면 branch 삭제는 협의된 상태에서 진행해야 합니다.
$ git branch -d feature/myGitTest
# 사용자의 branch를 -d 옵션을 사용해 삭제합니다.
$ git push origin :feature/myGitTest
# 삭제된 branch를 push를 통해 원격 저장소에서 삭제합니다.
지금까지 기본적으로 많이 사용하는 Git 사용방법에 대해서 알아보았습니다.
다음 포스트에서 좀더 다양한 Git 명령어를 이용해 상황별 사용법에 대해 알아보도록 하겠습니다.
Leave a comment