코드 관리를 위한 Git & GitHub
Git & GitHub
Git은 컴퓨터 파일의 변경 사항을 추적하고, 여러 명의 사용자들과 해당 파일들을 공유하고, 수정할 수 있도록 도와주는 분산 버전 관리 시스템(Distributed Version Control System)입니다. 각 클라이언트와 서버는 추적하고 있는 파일의 마지막 변경 사항(스냅샷)만을 저장하지 않고, 저장소(디렉토리)와 함께 모든 히스토리(변경 내역)를 복제합니다. 그렇기 때문에 서버에서 문제가 발생하더라도, 분산되어 있는 클라이언트 중 하나를 통해 기존 상태를 완벽하게 복원할 수 있습니다.
Git은 이와 같은 특성을 가지고 있기에 파일의 버전 관리가 용이하고, 각 버전을 통한 백업도 가능하며, 다른 개발자들과의 협업까지 가능합니다. 보통 Git을 통한 파일의 버전 관리는 주로 로컬에서 이루어 집니다. 하지만 진행하고 있는 프로젝트를 로컬이 아닌 외부에 공개하고 싶거나, 다른 사람들과 협업을 진행하고 싶다면 Git 호스팅 서비스인 GitHub를 사용하면 됩니다.
Git 사용을 위해서는 설치가 필요하며, 설치는 공식 사이트인 Git SCM에서 가능합니다.
초기 설정
Git 사용을 위해서는 터미널에서 기본적인 설정부터 진행해야 합니다. 다음 명령어를 작성해 주세요.
$ git config --global user.name "GitHub 사용자명"
$ gif config --global user.email "GitHub 이메일"
로컬 환경에서만 혼자서 작업한다면 name과 email 정보를 아무렇게나 작성해도 되지만, 이후 원격 저장소인 GitHub에 코드를 올리고 공유하기 위해 되도록이면 GitHub에서 사용하는 사용자 정보를 입력해 줍시다. 그리고 사용자명과 이메일 좌우의 큰 따옴표는 붙이지 않아도 무관합니다.
# Mac 사용자
$ git config --global core.autocrlf input
# Windows 사용자
$ git config --global core.autocrlf true
파일 작성 시 개행(New Line)을 하게 되면, Windows와 Mac은 서로 다른 방식으로 개행 문자(Windows는 \r\n, Mac은 \n)를 추가합니다. 그렇기 때문에 이후 협업하는 과정에서 충돌이 발생할 수 있는데, 위와 같이 설정을 하게 되면 개행 과정에서 발생하는 문제를 해결해 줍니다. 본인의 환경에 맞게 설정을 진행해 주세요.
$ git config --global init.defaultBranch main
마지막으로 init.defaultBranch의 값을 main으로 설정하면 됩니다. 기존 Git에서는 master라는 용어를 기본 브랜치로 사용했지만, 현재는 main을 사용하도록 제안하고 있습니다. 인종 차별과 같은 문제가 대두되면서 IT 업계에서도 이런 용어들을 바꾸고자 하는 움직임을 보이기 시작했는데, 대표적인 케이스가 master와 main이라 보면 됩니다.
브랜치(Branch)란, 독립적으로 작업을 진행할 수 있는 개념입니다. Git 프로젝트 생성 직후에는 main 브랜치만 존재하는데, 목적에 따라 브랜치를 나눈 후 기능을 구현하여 main에 병합하는 식으로 관리할 수 있습니다.
프로젝트 버전 관리 (Local)
Git으로 프로젝트를 관리하기 위해서는 프로젝트로 사용하고자 하는 디렉토리를 Git 프로젝트로 만들어 줘야 합니다. 작업을 시작하기 위한 디렉토리의 내부로 이동한 이후, git init 명령으로 초기화를 진행해 주세요. 명령어를 입력하게 되면 디렉토리가 Git 프로젝트로 초기화되고, 위 사진에 보이는 것처럼 .git이라는 디렉토리가 생성된 것을 확인할 수 있습니다.
.git은 저장소 역할의 디렉토리이며, 프로젝트에서 발생하는 모든 상황을 추적(Tracking)합니다.
이제 디렉토리 내부에 file-1이라는 파일을 생성하고, 어떤 변화가 있는지 살펴 보겠습니다.
git status는 현재 프로젝트의 내부 상태를 확인하는 명령입니다. 이 명령을 통해 새롭게 생성된 파일이 있는지, 기존에 존재하던 파일에 어떤 수정 사항이 있는지 등을 확인할 수 있습니다. 생성된 파일은 사진에 보이는 것과 같이 최초에는 Untracked 상태이며, 이후 이 파일의 변화를 추적하기 위해 git add라는 명령을 추가로 작성해야 합니다.
git add를 한 이후에는 프로젝트에 어떤 변화가 있는지 확인해 보겠습니다.
프로젝트의 상태를 확인해보면 파일명 앞에 new file이라는 내용이 붙은 것을 확인할 수 있습니다. 이 파일은 이제 Git에 의해 추적되고 있다는 의미에서, Tracked 상태가 된 것입니다. Tracked 상태가 된 파일은 앞으로 변경이 생길 때마다, 어떤 변경사항(new file, modify, delete 등)이 있었는지를 알려줍니다. 그리고 이렇게 add 된 파일들은 최종적으로 저장소에 저장할 준비가 된 것입니다.
add 된 파일들은 git commit -m "메시지" 명령으로 저장소에 저장할 수 있으며, 발생한 모든 상태 변화를 기록합니다. 이렇게 기록된 정보를 스냅샷(Snapshot)이라 부르며, 이를 통해 특정 시점에 디렉토리 내부에는 어떤 파일들이 있었는지, 그 파일들의 내용이 어떠했는지를 확인할 수 있습니다.
프로젝트 내부에서 변경 사항이 발생할 때마다 커밋을 하면 로그가 쌓이게 되는데, git log 명령으로 커밋 이력을 확인할 수 있습니다. 그렇게 확인한 이력들을 보면서, 원한다면 특정 커밋이 진행되었던 또는 진행되기 전의 시점으로 돌아갈 수도 있습니다.
Git 프로젝트 구조
Git init으로 프로젝트를 초기화하게 되면, 눈에 보이지는 않지만 프로젝트 내부에 위와 같은 구조가 생성됩니다. 저희는 지금까지 작업을 진행하고 있는 디렉토리의 명칭을 마음대로 불렀는데, 본래 명칭은 Working Directory입니다. 여기서 작업을 거치게 된 파일은 git add 명령을 통해 Staging Area라는 곳으로 이동되고, 최종적으로 git commit 명령을 통해 .git Directory에 스냅샷으로 저장할 수 있습니다.
그리고 Working Directory는 Untracked와 Tracked 상태의 파일들로 이루어지는데, 최초 생성한 파일은 항상 Untracked 상태에 놓이게 되어 Git의 추적을 기다립니다. 추적을 시작하기 위해서는 git add 명령어를 입력해야 하며, Staging Area로 이동이 됨과 동시에 Tracked 상태로 변경됩니다. 이후 커밋까지 이루어진 파일은 앞으로 계속해서 Tracked 상태를 유지하며, 어떤 변화가 발생할 때, 변경점을 쉽게 파악할 수 있습니다.
글로만 보면 이해가 어렵기 때문에 file-1과 file-2 두 파일을 관리하는 과정을 움짤로 살펴보겠습니다.
GitHub 연동하기
GitHub에는 로컬 프로젝트와 연동할 원격 저장소(외부 저장소)를 만들 수 있는데, GitHub 페이지에 보이는 Create Repository 버튼을 눌러 저장소(Repository)를 생성할 수 있습니다. 저는 테스트를 위해 git-practice라는 이름으로 저장소를 만들었는데, 만들게 되면 위와 같은 내용을 볼 수 있습니다.
분홍색 네모로 표시된 부분의 명령을 터미널에 똑같이 입력하면, 로컬에 작성된 프로젝트를 해당 저장소에 올릴 수 있습니다. 저희는 위에서 git init 명령어를 통해 미리 Git 프로젝트 만들었기 때문에, 아래 ...or push 부분의 명령만 따라 입력하면 됩니다. 기본 브랜치(Branch)도 미리 main으로 설정했기 때문에, 두 번째 줄의 명령은 무시해도 됩니다.
git remote add는 로컬 프로젝트와 연동하고자 하는 원격 저장소를 지정하는 명령입니다. 뒤에 따라오는 https://github.com/.../git-practice.git은 원격 저장소의 주소이며, origin은 해당 주소를 지칭하는 단어라 생각하면 됩니다. origin 말고도 다른 이름을 사용해도 되지만, 관례적으로 origin을 사용하고 있습니다. 원격 저장소를 등록한 이후에는 git remote -v 명령으로 잘 연결 되었는지 확인하면 됩니다.
이렇게 원격 저장소를 연결한 이후에는 git push -u origin main 명령으로 로컬의 데이터를 올리면 됩니다. 이 명령은 main(브랜치)에서 작업한 내용을 origin(원격 저장소)에 등록하겠다는 의미를 갖고 있습니다. 그리고 push 뒤에 -u 옵션이 붙게 되면, 이후 새로운 커밋의 내용을 push할 때, origin main을 붙이지 않고 간편하게 git push만 입력해도 됩니다.
그럼 파일이 제대로 원격 저장소에 등록되었는지 확인해 볼까요?
All Done! 로컬에서 작업한 내용들이 제대로 올라간 것을 볼 수 있습니다. 지금까지 본문을 통해 알아본 과정을 똑같이 반복하면서 원격 저장소에 작업한 내용들을 올리면 됩니다. 본문에서 다룬 내용들 정도만 숙지해도, 혼자 가벼운 용도로 사용하기에는 크게 어렵지 않습니다.
글을 마무리하며
Git을 제대로 사용하기 위해서는 더 많은 명령들을 알아야 하는데, 본문에는 제대로 담지 못했습니다. 대표적으로 원격 저장소의 최신 상태를 받아오는 git pull이나 새로운 브랜치를 만드는 git branch 명령 등이 있습니다. 물론 본문 내용 정도만 알아도 앞서 언급 드린 것처럼, 혼자 가볍게 사용하기에는 무리가 없습니다. 하지만 좀 더 멋지게 사용하고 싶다면, 추가적인 명령어들을 찾아서 익혀 보시기 바랍니다.
검색을 통해 해소하셔도 좋고, 공식 사이트의 도큐먼트를 참고하셔도 좋습니다.
'🌈 기술스택 > Git' 카테고리의 다른 글
Stash로 변경 이력 임시 저장하기 (0) | 2021.10.24 |
---|---|
Merge와 Rebase 알아보기 (0) | 2021.10.24 |
프로젝트를 멋지게 설명하는 README.md (0) | 2021.09.25 |
Branch의 종류와 사용법 (0) | 2021.09.25 |
느낌 있는 Commit Message 작성하기 (0) | 2021.09.25 |
댓글
이 글 공유하기
다른 글
-
Merge와 Rebase 알아보기
Merge와 Rebase 알아보기
2021.10.24 -
프로젝트를 멋지게 설명하는 README.md
프로젝트를 멋지게 설명하는 README.md
2021.09.25 -
Branch의 종류와 사용법
Branch의 종류와 사용법
2021.09.25 -
느낌 있는 Commit Message 작성하기
느낌 있는 Commit Message 작성하기
2021.09.25