git

git은 소스 코드나 문서와 같은 파일의 변경 이력을 체계적으로 관리하는 버전 관리 시스템(version control system, VCS) 입니다.

코드의 변경 사항을 체계적으로 기록하고 관리할 수 있으며, 여러 명이 동시에 하나의 프로젝트를 효율적으로 관리하고 협업할 수 있게 돕습니다.

여기서는 git에 대한 모든걸 다루진 않고, BlueBase 프로젝트에서 필요한것 위주로만 다룹니다.

git에 대한 전반적인 이해는 다음의 링크를 참고해주세요:

주요 기능

  • 버전 관리: 코드의 변경 이력을 체계적으로 기록.

  • 협업 관리: 여러 사람이 동시에 하나의 프로젝트에서 독립적으로 작업 가능.

  • 변경 사항 병합: 다양한 브랜치에서 이루어진 작업을 하나로 결합(merge).

  • 원격 저장소: GitHub, GitLab과 같은 서버에 코드를 저장 및 공유.

핵심 개념

  • repository: 파일 변경 이력을 저장하는 프로젝트의 메인 저장 공간.

  • commit: 특정 시점에서 변경된 내용을 저장하는 단위. 모든 commit은 고유한 id를 가지며 변경 이력을 추적할 수 있음.

  • branch: repository 내에서 독립적인 개발 흐름을 의미하며, 기본적으로 main branch에서 파생하여 작업함.

  • merge: 서로 다른 branch의 작업 내용을 하나로 합치는 과정.

  • remote: 로컬에서 관리하는 repository를 원격 서버에 연결하여 저장, 관리, 공유할 수 있는 공간.

또다른 중요한 개념인 rebase에 대해서는 차차 알게될 것입니다.

사용법 예시

1. repository 초기화

프로젝트 폴더를 git repository로써 관리하게끔 합니다.

예: 프로젝트 myrepository

# 폴더 생성
mkdir myrepository

# 폴더로 이동
cd myrepository

# git 초기화
git init

혹은, 원격에 있는 repository를 내 로컬 환경에 가져옵니다.

예: GitHub의 yourgithubid 라는 계정에 있는 myrepository

# 로컬에 복사
git clone https://github.com/yourgithubid/myrepository.git

# 폴더로 이동 (git 초기화가 되어있음)
cd myrepository

git repository로써 관리되는 폴더는 .git이라는 폴더가 내부에 있습니다. 여기에서 다양한 repository 정보를 확인할 수 있습니다:

# 내용물 확인
cat .git/config

2. 개발용 branch로 이동

기본적인 branch는 main입니다. 보통 개발 과정에서는 dev와 같은 새로운 branch를 만들어서 작업을 하고, 한 단위 작업이 끝나면 main에 merge하는 방식으로 개발을 합니다.

원격 저장소에 `dev가 있을경우:

# `dev` branch를 origin(remote)에서 가져오면서 만듦
git checkout -b dev origin/dev

원격에 없고 로컬에서 새로운 branch를 만들고 싶을때:

# `dev` branch 생성
git branch dev

# 현재 작업 branch를 `dev` branch로 변경
git switch dev

3. 파일 수정

이제 원하는대로 파일을 수정하거나, 추가하거나, 삭제합니다.

예시로 temp.txt라는 파일을 만들어보겠습니다.

# 새로운 파일 생성
touch temp.txt

4. 변경 사항 추가

위에서 작업한 변경 사항을 git이 추적할 수 있도록 추가합니다. 이를 “stage에 올린다”라고 합니다.

# 해당 변경 사항만 추가
git add temp.txt

모든 변경 사항을 한번에 추가하려면 다음과 같이 하면 됩니다:

# 모든 변경 사항을 추가
git add .

이러면 파일이 삭제된 경우에도 (보통 git rm을 사용) 알아서 변경 사항으로 넣어줍니다.

5. 변경 사항 저장

위에서 추가한 변경 사항들을 하나의 변경 사항 단위인 commit으로 만듭니다. 이를 “commit 한다”라고 합니다. 이때 메시지를 같이 남길 수 있는데, 알아볼 수 있도록 적절하게 써주는게 좋습니다.

# 메시지와 함께 commit
git commit -m "temp.txt 파일 추가"

그럼 이제 dev branch 기준으로는 commit이 하나 생겼습니다. 이를 확인하려면 log 기능을 사용하면 됩니다:

# commit 기록 확인
git log

6. branch 병합

이제 dev branch에서 작업한 내용을 main branch에 병합합니다. 이를 “merge 한다”라고 합니다.

# 현재 작업 branch를 `main` branch로 변경
git switch main

# 현재 작업 branch에 `dev` branch를 병합
git merge dev

7. 원격 저장소에 반영

로컬에서 작업이 끝났으면 이제 원격 저장소에 업로드 합니다. 이를 “push 한다”라고 합니다.

# origin(remote)의 `main` branch에 commit들을 업로드
git push origin main

8. 요약

# 로컬에 복사
git clone https://github.com/yourgithubid/myrepository.git

# 폴더로 이동 (git 초기화가 되어있음)
cd myrepository

# `dev` branch를 origin(remote)에서 가져오면서 만듦
git checkout -b dev origin/dev

# `dev` branch 생성
git branch dev

# 현재 작업 branch를 `dev` branch로 변경
git switch dev

# 새로운 파일 생성
touch temp.txt

# 해당 변경 사항만 추가
git add temp.txt

# 메시지와 함께 commit
git commit -m "temp.txt 파일 추가"

# 현재 작업 branch를 `main` branch로 변경
git switch main

# 현재 작업 branch에 `dev` branch를 병합
git merge dev

# origin(remote)의 `main` branch에 commit들을 업로드
git push origin main