CBIT(ChungBuk university gIT)는 Git 기반 사용자 정의 버전 관리 시스템입니다. 이 프로젝트는 버전 관리의 핵심 개념을 이해하고 실제로 구현해 보는 것을 목표로 합니다.
- 버전 관리 시스템 원리 학습
- 파일 시스템 조작, 해시 생성, 데이터 압축 등의 low-level 작업에 대한 이해 증진
- 오픈 소스 프로젝트 기여
CBIT는 다음과 같은 핵심 버전 관리 기능을 제공합니다
- 새로운 CBIT 저장소를 생성합니다.
.cbit디렉토리를 만들고 필요한 하위 구조를 설정합니다.
- 작업 디렉토리의 변경 사항을 스테이징 영역에 추가합니다.
- 파일의 현재 상태를 캡처하고 해시를 생성합니다.
- 대용량 파일 처리를 위해 압축 기능을 사용합니다.
- 스테이징된 변경 사항을 영구적인 스냅샷으로 저장합니다.
- 커밋 메시지와 함께 고유한 해시 ID를 생성합니다.
- 이전 커밋과의 차이를 저장하여 공간을 절약합니다.
- 프로젝트의 전체 커밋 히스토리를 시간 순으로 표시합니다.
- 각 커밋의 해시, 작성자, 날짜, 메시지를 보여줍니다.
- 지정된 커밋의 상태로 작업 디렉토리를 되돌립니다.
- 부분 해시 매칭을 지원하여 사용자 편의성을 높입니다.
- 현재 작업 디렉토리의 상태를 보여줍니다.
- 수정된 파일, 스테이징된 변경 사항, 추적되지 않은 파일을 표시합니다.
.cbitignore파일을 통해 특정 파일이나 디렉토리를 버전 관리에서 제외합니다.
CBIT는 Node.js 환경에서 실행됩니다.
Homebrew는 macOS와 Linux 사용자를 위한 패키지 관리자입니다. Homebrew를 통해 CBIT를 쉽게 설치할 수 있습니다.
-
Homebrew 설치 (이미 설치되어 있다면 이 단계를 건너뛰세요):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -
CBIT 설치:
brew tap 0Chord/cbit brew install cbit
-
설치 확인:
cbit --version
npm(Node Package Manager)을 사용하여 CBIT를 전역으로 설치할 수 있습니다.
-
다음 명령어를 실행하여 CBIT를 전역으로 설치합니다:
npm install -g cbit
-
설치가 완료되면 다음 명령어로 설치를 확인합니다:
cbit --version
개발 목적이나 최신 기능을 사용하고 싶다면, 소스에서 직접 CBIT를 설치할 수 있습니다.
-
이 저장소를 클론합니다:
git clone https://github.com/0Chord/cbit.git
-
프로젝트 디렉토리로 이동합니다:
cd cbit -
필요한 의존성을 설치합니다:
npm install
-
CBIT를 전역으로 링크합니다:
npm link
-
설치가 성공적으로 완료되었는지 확인합니다:
cbit --version
CBIT는 명령줄 인터페이스(CLI)를 통해 사용할 수 있습니다. 각 명령어의 자세한 사용법은 다음과 같습니다:
새로운 CBIT 저장소를 생성하려면 다음 명령어를 사용합니다:
cbit init이 명령어는 현재 디렉토리에 .cbit 폴더를 생성하고, 필요한 하위 구조를 설정합니다. 이미 CBIT 저장소가 있는 디렉토리에서 이 명령을 실행하면 오류 메시지가 표시됩니다.
변경된 파일을 스테이징 영역에 추가하려면 다음 명령어를 사용합니다:
cbit add이 명령어는 현재 디렉토리의 모든 변경 사항을 스테이징 영역에 추가합니다. 특정 파일만 추가하는 기능은 현재 개발 중입니다.
스테이징된 변경 사항을 커밋하려면 다음 명령어를 사용합니다:
cbit commit이 명령어를 실행하면 커밋 메시지를 입력할 수 있는 프롬프트가 나타납니다. 메시지를 입력하고 Enter 키를 누르면 커밋이 생성됩니다.
프로젝트의 커밋 히스토리를 조회하려면 다음 명령어를 사용합니다:
cbit log이 명령어는 가장 최근의 커밋부터 시작하여 전체 커밋 히스토리를 표시합니다. 각 커밋에 대해 해시, 작성자, 날짜, 그리고 커밋 메시지가 표시됩니다.
작업 디렉토리를 특정 커밋의 상태로 되돌리려면 다음 명령어를 사용합니다:
cbit restore <commit-hash><commit-hash>는 복원하려는 커밋의 해시입니다. 전체 해시를 사용할 수도 있고, 해시의 처음 몇 글자만 사용할 수도 있습니다.
현재 작업 디렉토리의 상태를 확인하려면 다음 명령어를 사용합니다:
cbit status이 명령어는 수정된 파일, 스테이징된 변경 사항, 그리고 추적되지 않은 파일의 목록을 보여줍니다.
다음은 CBIT의 기본적인 워크플로우 예시입니다:
# 새 저장소 초기화
cbit init
# 파일 생성 또는 수정
echo "Hello, CBIT!" > hello.txt
# 변경 사항을 스테이징 영역에 추가
cbit add
# 변경 사항 커밋
cbit commit
# 커밋 메시지 입력: "Initial commit: Add hello.txt"
# 파일 수정
echo "CBIT is awesome!" >> hello.txt
# 상태 확인
cbit status
# 변경 사항을 다시 스테이징하고 커밋
cbit add
cbit commit
# 커밋 메시지 입력: "Update hello.txt"
# 커밋 히스토리 확인
cbit log
# 이전 버전으로 복원 (커밋 해시의 처음 7자리 사용)
cbit restore 1234567CBIT 프로젝트의 구조는 다음과 같습니다:
cbit/
├── bin/
│ └── cbit.js # CLI 진입점
│── add.js # 파일 스테이징 로직
│── commit.js # 커밋 생성 로직
│── init.js # 저장소 초기화 로직
│── log.js # 커밋 히스토리 조회 로직
│── restore.js # 특정 커밋으로 복원 로직
│── status.js # 작업 디렉토리 상태 확인 로직
│── utils.js # 유틸리티 함수 모음
├── .gitignore # Git 무시 파일 목록
├── package.json # 프로젝트 메타데이터 및 의존성 정보
├── package-lock.json # 의존성 잠금 파일
└── README.md # 프로젝트 문서
bin/cbit.js: 명령줄 인터페이스의 진입점입니다. 사용자 입력을 파싱하고 적절한 모듈을 호출합니다.add.js: 파일의 변경 사항을 감지하고 스테이징 영역에 추가하는 로직을 담당합니다.commit.js: 스테이징된 변경 사항을 새로운 커밋으로 생성하는 과정을 처리합니다.init.js: 새로운 CBIT 저장소를 초기화하는 로직을 포함합니다.log.js: 커밋 히스토리를 조회하고 표시하는 기능을 구현합니다.restore.js: 특정 커밋 상태로 작업 디렉토리를 복원하는 로직을 담당합니다.status.js: 현재 작업 디렉토리의 상태를 분석하고 보고하는 기능을 구현합니다.utils.js: 여러 모듈에서 공통으로 사용되는 유틸리티 함수들을 포함합니다.