GitHub에 대한 자료도 협업 중 관련 지식이 없는 친구들이 많아 알려주기 위해 제작한 자료입니다. 저도 잘 아는 건 아니지만, 이 자료가 도움이 되는 사람이 있었으면 좋겠고, 사실 개념적으로 보는 것보단 실제 프로젝트를 진행하며 활용해 보는 것이 실력 향상에 더 도움이 될 것이니 다들 열심히 해서 잘 됐으면 좋겠습니다 !
오늘은 버전 관리를 위한 Git & GitHub에 대해 알아봅시다. 버전 관리 시스템은 파일 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템을 의미하며, 이러한 버전 관리 시스템을 사용하면 각 파일을 이전 상태로 되돌리거나, 시간에 따라 수정 내용을 비교하거나, 누가 문제를 일으켰는지 추적하기 용이합니다. 이런 이유에서 개발자들은 버전 관리 시스템으로 Git & GitHub를 주로 활용합니다.
Git은 분산 버전 관리 시스템(DVCS)으로, 로컬에서 코드 변경 사항을 추적하고 관리할 수 있도록 하는 시스템이고, GitHub는 Git 리포지토리를 온라인에서 호스팅할 수 있도록 지원하는 플랫폼입니다. GitHub를 활용하면, 팀원들과 협업하거나 오픈 소스 프로젝트를 운영할 수 있습니다.
분산 버전 관리 시스템(DVCS, Distributed Version Control System) : 여러 사용자가 동시에 소스 코드나 파일의 변경 이력을 관리할 수 있도록 돕는 시스템
Git
- 소스 코드 버전 관리 도구
- 로컬 작업 환경
GitHub
- Git 기반 클라우드 서비스
- 코드 호스팅 협업 플랫폼
Git을 사용하려면 Git Bash를 설치해야 합니다.
패키지 관리 시스템 Homebrew 설치하기 (Mac 다운로드)
터미널에서 Homebrew를 사용하여 설치
brew install git
설치 확인
bash
git --version
Git Bash를 처음 설치했다면, 사용자 정보를 설정해야 합니다.
# 사용자 이름 설정
git config --global user.name "Your Name"
# 이메일 설정
git config --global user.email "your.email@example.com"
리포지토리(Repository)란, 프로젝트의 모든 파일, 폴더 및 이력 정보를 담는 저장소를 의미하며, 프로젝트의 모든 버전, 변경 사항(log) 등을 모두 기록합니다.
프로젝트 1개에 여러 개 리포지토리를 사용할 수도 있으나, 작은 프로젝트를 진행한다면 한 개의 리포지토리만 사용하는 경우가 많습니다.
Git에서 프로젝트를 관리하려면 리포지토리를 생성해야 합니다.
git init
# 원격 리포지토리 연결
git remote add origin <repository-url>
Repository의 URL은 어떻게 확인하나요?
→ 리포지토리 페이지에서 Code → HTTPS 주소 복사 후, 부분에 붙여넣기
Branch는 프로젝트의 특정 시점에서 독립적인 작업을 진행할 수 있도록 하는 분기점입니다. 기본적으로 main 또는 master 브랜치가 있으며, 새로운 기능을 개발하거나 버그를 수정할 때 별도의 브랜치를 생성하여 작업합니다. 이러한 브랜치를 사용하면, 각 브랜치에서 독립적으로 코드를 변경할 수 있어 여러 개발자가 동시에 작업해도 서로의 작업에 영향을 주지 않습니다.
Checkout은 특정 브랜치나 커밋으로 이동하는 작업으로, 작업 중인 브랜치를 전환하거나 과거 상태로 복원할 때 사용됩니다.
git checkout 브랜치이름|커밋해시git log 명령어로 확인 가능합니다.
# 새 브랜치 생성
git branch new-branch
# 브랜치 변경
git checkout new-branch
Merge는 두 개의 브랜치를 병합하는 작업으로, 일반적으로 기능 개발이 완료된 브랜치를 main 브랜치에 병합하여 최종 결과물을 만드는 데 사용됩니다.
# main 브랜치로 이동
git checkout main
# 병합 실행
git merge new-branch
이러한 branch를 나누지 않으면 여러 사람이 커밋하는 과정에서 충돌이 발생할 수 있습니다. 그래서 되도록이면 main 브랜치가 있다면 본인의 브랜치를 파서 내 작업만 진행하고, 나중에 main에 병합해 주는 과정을 거칩니다.
fetch 명령어는 원격 저장소의 변경 사항을 가져와 동기화 시키기 위한 명령어로, 내용을 자동으로 병합하지 않습니다. 반면에 git pull은 git fetch와 git merge를 한 번에 수행하는 명령어로, 원격 저장소에서 변경 사항을 가져오고, 현재 작업 중인 브랜치에 자동으로 병합하여 업데이트합니다.
두 개 이상의 브랜치에서 동일한 파일을 수정하고 병합하면, 충돌 현상이 발생할 수 있어 프로젝트 진행 중엔 되도록 git pull을 사용하기보단, fetch와 merge를 따로 사용하는 것을 권고합니다. 이렇게 하면 충돌 현상으로 인한 시간 소모를 줄일 수 있습니다.
git fetch origin
Git은 코드 변경 사항을 commit하여 저장합니다. 즉, 특정 시점의 파일 상태를 저장하는 것을 commit이라고 합니다. git commit -m [설명] 명령어를 사용하면, 변경 사항에 대한 설명을 담은 메시지를 저장할 수 있습니다.
이후, push 명령어를 사용하면, 로컬 저장소의 commit을 원격 저장소에 업로드할 수 있습니다. push 명령어를 사용할 땐, 원격 저장소에 이미 존재하는 변경 사항과 충돌이 발생할 수 있으므로 반드시 변경 사항을 가져와 병합한 뒤 진행해야 합니다.
# 변경 사항 추가
git add .
# 커밋 생성
git commit -m "초기 커밋"
# 리포지토리로 푸시
git push origin main
다른 사용자의 GitHub 리포지토리를 로컬에 복사하고 싶다면, clone 명령어를 사용하면 됩니다.
git clone <repository-url>
clone과 remote의 차이
→ git clone은 git에 만들어져 있는 리포지토리를 처음의 상태로 가져오는 것이고, git remote는 내가 작업하고 있는 프로젝트를 git에 존재하는 리포지토리에 연결하기 위해 사용하는 명령어입니다. (이렇게 말하면 복잡한데, 쉽게 말해서 지금 내 폴더에 리포지토리 사본을 만들고 싶으면 clone, 내가 사용하고 있는 폴더 그 자체를 리포지토리에 연결하고 싶다면 remote를 사용한다고 생각하면 됩니다)
Fork는 다른 사람의 리포지토리를 내 GitHub 계정으로 복사하는 기능으로, 오픈 소스 프로젝트에 기여할 때 유용합니다. 다른 사용자가 원본 저장소에 영향을 주지 않고 자유롭게 작업할 수 있기 때문입니다.
만약 여러분이 오픈 소스 프로젝트에 기여하고 싶다면, 원하는 저장소로 이동해 Fork를 생성하고, 복사된 리포지토리를 로컬로 클론해서 작업을 수행하면 됩니다. 작업이 완료되면 GitHub 원본 저장소로 가서 Pull Request를 생성하면, 원본 저장소의 소유자가 변경 사항 사항을 검토 및 병합할 수 있습니다.
사실 노션에서 만든 자료를 그대로 복사해 가져와서, 실제 만든 자료에 이해를 위해 넣은 사진 일부가 빠져있습니다. 그래서 이를 보충하고자 전체 정리본 사진까지 첨부했습니다. 혹여나 이 자료의 pdf가 필요하신 분이 계시다면, 댓글 남겨주시길 바랍니다. 공유해 드리겠습니다.




