-
Git 및 GitHub 소개
- Git: 분산형 버전 관리 시스템으로, Linus Torvalds가 Linux 커널 관리를 위해 개발하였다.
- GitHub: Git을 기반으로 한 원격 저장소 서비스로, 협업 및 코드 관리를 용이하게 해준다.
Shell 및 Vim 명령어
- Shell: 운영체제의 커널과 사용자를 연결하는 소프트웨어이다.
주요 쉘 종류:
- sh (Bourne Shell): UNIX 쉘의 기본 형태이다.
- csh: 버클리에서 개발된 UNIX 쉘이다.
- bash (Bourne Again Shell): 가장 널리 사용되는 UNIX 쉘이다.
- zsh: 다양한 기능을 제공하는 UNIX 쉘이다.
- Vim: Bill Joy의 vi 확장판으로, CLI 기반의 텍스트 편집기이다.
모드:
- Normal mode: 기본 모드로 모든 키가 명령으로 동작한다.
- Insert mode: 텍스트 입력 및 수정 모드이다.
- Visual mode: 블록 설정 모드이다.
- Command-line mode: 패턴 검색, 필터, 줄 이동 등의 액션을 수행하는 모드이다.
Vim의 특징:
- 오픈 소스: 무료로 사용할 수 있는 텍스트 편집기이다.
- 모드 기반: 다양한 모드를 통해 효율적인 텍스트 편집이 가능하다.
- 확장 기능: vundle, vim-plug 등의 확장 기능 설치 관리자를 제공한다.
주요 명령어:
- Normal mode:
- h, j, k, l: 방향키 역할을 한다.
- i: Insert mode로 전환한다.
- v: Visual mode로 전환한다.
- ESC: Normal mode로 돌아간다.
- Command-line mode:
- :q: 종료한다.
- :w: 저장한다.
- :wq: 저장 후 종료한다.
Git 기본 개념
- Git의 정의: 분산형 버전 관리 시스템으로, 여러 사용자가 동시에 작업할 수 있도록 지원한다.
주요 특징:
- 단순한 구조: 사용이 간편하고 빠른 속도를 자랑한다.
- 비선형적 개발: 수천 개의 브랜치를 지원하여 다양한 개발 방식이 가능하다.
- 동시 작업 가능: 소스코드 주고받기 없이 여러 사용자가 동시에 작업할 수 있다.
- 커밋 관리: 수정 내용을 커밋 단위로 관리하여 원하는 시점으로 체크아웃할 수 있다.
- 브랜치 개발: 새로운 기능 추가는 브랜치로 개발하여 실험이 가능하다.
Git GUI 클라이언트
- GUI 클라이언트: Git을 보다 쉽게 사용할 수 있도록 도와주는 그래픽 사용자 인터페이스이다.
주요 클라이언트:
- Git GUI: 공식 Git GUI 클라이언트이다.
- GitHub Desktop: GitHub에서 제공하는 클라이언트이다.
- Sourcetree: Atlassian에서 제공하는 클라이언트이다.
- GitKraken: 직관적인 인터페이스를 제공하는 클라이언트이다.
- CLI의 중요성: CLI(Command Line Interface)는 Git을 배우는 데 더 유용하며, GUI 사용 시 도구에 대한 적응이 필요하다.
Git 내부 구조
- Blob: 파일 하나의 내용에 대한 정보이다.
- Tree: Blob이나 subtree의 메타데이터(디렉토리 위치, 속성, 이름 등)를 포함한다.
- Commit: 커밋 순간의 스냅샷을 나타낸다.
- Git의 작동 원리: Git은 객체를 기반으로 하여 버전 관리를 수행하며, 각 객체는 고유한 해시값을 가진다.
로컬 및 원격 저장소
- 로컬 저장소: 사용자의 컴퓨터에 저장된 Git 저장소이다.
- 원격 저장소: GitHub와 같은 서버에 저장된 저장소로, 협업 시 사용된다.
- 작업 흐름:
- git add: 변경된 파일을 스테이징 영역에 추가한다.
- git commit: 스테이징된 파일을 커밋하여 로컬 저장소에 저장한다.
- git push: 로컬 저장소의 변경 사항을 원격 저장소에 반영한다.
- git pull: 원격 저장소의 변경 사항을 로컬 저장소로 가져온다.
Git 설정 및 시작하기
- 설정 명령어:
- $ git config --global user.name "{username}": 사용자 이름 설정
- $ git config --global user.email "{emailaddr}": 사용자 이메일 설정
- $ git config --global core.editor "vim": 기본 편집기 설정
- 시작하기:
- 저장소 클론: $ git clone {username/repo-addr} 명령어로 원격 저장소를 클론한다.
- 디렉토리 이동: $ cd {repo-addr} 명령어로 클론한 저장소로 이동한다.
- 상태 확인: $ git status 명령어로 현재 상태를 확인한다.
커밋 메시지 규칙
- Conventional Commits: 커밋 메시지를 일관되게 작성하기 위한 규칙이다.
- 형식:
- {type}: {description}: 작업 단위 축약
- {body}: 작업 상세 기술
- {footer}: 부가정보
- 타입 예시:
- feat: 기능 개발 관련
- fix: 오류 개선 혹은 버그 패치
- docs: 문서화 작업
- test: 테스트 관련
브랜치 및 병합 전략
- 브랜치 모델:
- git flow: 전통적이고 많이 사용되는 모델로, 각 단계가 명확히 구분된다.
- github flow: 브랜치 모델의 단순화로, CI 의존성이 높다.
- gitlab flow: 배포 및 이슈에 대응하기 쉬운 모델이다.
- 브랜치 작업:
- 브랜치 생성: $ git branch {branch name} 명령어로 새로운 브랜치를 생성한다.
- 브랜치 전환: $ git switch {branch name} 명령어로 브랜치를 전환한다.
- 병합: $ git merge {branch name} 명령어로 브랜치를 병합한다.
GitHub 프로젝트 관리
- 이슈 관리: GitHub에서 프로젝트의 다양한 이슈를 관리하기 위한 기능이다.
- 이슈 템플릿: 기능, 질문, 버그 리포트에 대한 양식을 지정할 수 있다.
- 라벨: 이슈의 상태와 종류, 긴급도를 표시하기 위해 사용된다.
- 마일스톤: 작성된 이슈가 프로젝트의 어떤 주기에서 해결되어야 하는지를 표기한다.
- 프로젝트 관리: GitHub에서 repo issue 기반의 작업 관리를 지원한다.