Git 버전 관리의 기본 단계
1. 작업 디렉토리
- 프로젝트 파일이 있는 로컬 디렉토리.
- 여기서 파일을 추가, 수정, 삭제하는 작업을 수행.
mkdir myproject
cd myproject
git init
-> 로컬에서 작업할 디렉토리를 생성하고 그 안에서 git 저장소 초기화.
2. 스테이징 영역
- 작업 디렉토리에서 변경된 파일 중 커밋할 파일을 선택하는 곳이다.
- 'git add' 명령어를 사용하여 파일을 스테이징 영역에 추가.
echo "Hello, Git!" > hello.txt
git add hello.txt
-> 파일을 생성하거나 수정한 한 후, 이를 스테이징 영역에 추가.
3. 커밋
- 스테이징 영역에 추가된 변경 사항을 저장소의 기록으로 확정짓는 행위.
- 'git commit' 명령어를 사용하여 커밋 생성.
- 각 커밋은 고유한 아이디를 가지며 프로젝트의 특정 시점을 나타냄.
git commit -m "Initial commit with hello.txt"
-> 추가된 파일을 커밋.
4. 브랜치
- 독립적으로 어떤 작업을 진행하기 위한 프로젝트의 '가지'
- 일반적으로 새 기능 추가나 버그 수정 등을 위해 사용
- 'git branch' 명령어로 새로운 브랜치를 생성.
git branch new-feature
git checkout new-feature
-> 새 기능을 추가하기 위해 브랜치를 생성하고 해당 브랜치로 전환.
5. 병합
- 두 브랜치의 변경 사항을 하나로 합치는 과정.
- 기능 개발을 완료한 브랜치를 메인 브랜치에 병합할 수 있음.
- 'git merge' 명령어를 사용하여 병합.
echo "New feature" > feature.txt
git add feature.txt
git commit -m "Add new feature"
git checkout main
git merge new-feature
-> 새 브랜치에서 작업을 진행한 후, 변경 사항을 메인 브랜치에 병합.
6. 원격 저장소
- 인터넷이나 네트워크 어딘가에 위치한 저장소.
- GitHub가 이에 해당.
- 'git push' 명령어로 로컬 변경 사항을 원격 저장소에 업로드.
git remote add origin <원격 저장소 URL>
git push -u origin main
-> 로컬에서의 변경 사항을 원격 저장소에 푸시
Git의 장점
1. 분산 버전 관리 시스템
: 각 개발자가 로컬 저장소의 전체 복사본을 가지고 작업. 이는 중앙 집중식 시스템에 비해 더 높은 유연성과 안정성을 제공한다.
2. 효율적인 성능
: 빠른 속도화 효율적인 성능을 가지고 있다. 작업이 매우 빠르게 수행된다.
3. 데이터 무결성
: 커밋, 파일 상태 등 모든 것을 SHA-1 해시를 사용하여 관리. 이를 통해 데이터의 무결성을 보장, 변경 내역을 추정할 수 있다.
4. 데이터 백엄
- 깃 저장소의 각 복사본은 모든 버전의 코드를 포함하고 있어, 데이터 백업의 역할을 한다. 중앙 저장소에서 문제가 발생해도 어느 한 개발자의 로컬 복사본에서 전체 데이터를 복구할 수 있다.
5. 협업과 코드 리뷰의 용이성
- 브랜치, 풀 리퀘스트, 머지 리퀘스트 등의 기능을 통해 팀원 간 협업이 용이하다. 코드 리뷰 프로세스도 간편하게 진행할 수 있다.
Git을 사용하지 않는다면?
-> 다른 버전 관리 시스템을 사용하거나, 매우 기본적인 수동 방식으로 버전 관리를 해야할 것이다. 아래는 다양한 대안적인 버전 관리 시스템과 방법이다.
다른 버전 관리 시스템
1. Subversion(SVN)
- 중앙 집중식 버전 관리 시스템. 프로젝트의 모든 파일과 역사를 중앙 서버에 저장함.
2. Mercurial
- 분산 버전 관리 시스템. git과 유사한 기능 제공.
- 사용자 친화적인 인터페이스와 더 단순화된 사용 방법을 가지고 있음.
3. PErforce
- 큰 규모의 프로젝트와 바이너리 파일에 적합한 버전 관리 시스템.
- 게임 개발과 같은 복잡한 프로젝트에서 많이 사용됨.
수동 버전 관리 방법
1. 파일 복사
- 가장 기본적인 방법은 프로젝트의 중요한 시점마다 전체 폴더를 복사하여 다른 위치에 저장.
- 매우 원시적인 방법이며 큰 프로젝트나 협업 환경에서는 비효율적.
2. 아카이브 파일
- 프로젝트의 특정 버전을 압충 파일로 만들어 보관.
- 시간이 지남에 다라 다양한 버전의 압축 파일이 생성됨.
버전 관리 시스템은 프로젝트의 규모, 팀의 요구 사항, 협업 방식에 따라 선택되어야 함.
Git은 현대적이고 다재다능한 옵션이지만, 특정 요구 사항에 따라 다른 시스템이 더 적합할 수 도 있다. 수동 방식은 매우 간단한 개인 프로젝트나 임시적인 작업에는 적합할 수 있으나, 복잡하고 지속적인 개발에는 적합하지 않다.