이틀 동안 Git 전반적인 내용에 대해 학습했다. 첫날에는 Shell Command와 Vim 등 Git CLI 사용에 필요한 도구와 기본적인 Git 활용법을 익혔다. 둘째 날에는 간단한 프로젝트가 주어졌고, 팀원들과 함께 GitHub를 사용해 실제 프로젝트를 진행하며 협업하는 과정을 실습했다.
파일 및 디렉터리 관련 명령어
ls
- $ ls : 디렉터리 내 파일 및 폴더 나열
- $ ls -l : 상세 정보 포함하여 나열
- $ ls -a : 숨겨진 파일 포함하여 나열
- $ ls -al : 숨겨진 파일과 상세 정보 포함하여 나열
cd
- $ cd Documents : 문서 디렉터리로 이동
- $ cd .. : 상위 디렉터리로 이동
- $ cd ~ : 홈 디렉터리로 이동
mkdir
- $ mkdir dev : dev 디렉터리 생성
pwd
- $ pwd : 현재 디렉터리 경로 출력
rm
- $ rm -r dev : dev 디렉토리 삭제
- $ rm -rf dev : dev 디렉토리 강제 삭제
- rm -r은 쓰기 보호 파일을 삭제하기 전 사용자에게 확인 요청, rm -rf는 쓰기 보호 파일도 사용자 확인 요청 없이 삭제
파일 작업 관련 명령어
touch
- $ touch file.md : file.md 새 파일 생성
mv
- $ mv file.md temp/ : file.md 파일을 temp 디렉터리로 이동
- $ mv file.md file_copy.md : file.md 파일을 file_copy.md로 이름 변경
cp
- $ cp file.md file_copy.md : file.md 파일 복사
- $ cp -r folder1/ folder2/ : folder1 디렉터리 복사
cat
- $ cat file.md : file.md 파일 내용 출력
head / tail
- $ head -n 10 file.md : file.md 파일의 처음 10줄 출력
- $ tail -n 10 file.md : file.md 파일의 끝 10줄 출력
Vim
- Bill Joy의 Vi의 확장판 (Vi IMproved)
- Unix 기반의 편집기 Vi를 개선한 텍스트 편집기
- 코드 작성, 문서 편집, 설정 파일 관리 등 다양한 작업에 사용
- 모드 기반의 마우스 입력 대체
- normal mode(default): 텍스트 탐색 및 명령 실행
- insert mode(i): 텍스트 입력 및 수정
- visual mode(v): 텍스트 블록 선택
- command-line mode(:): 파일 저장, 패턴 검색, 필터, 줄이동, 종료 등의 액션 수행
Set Configuration
사용자 이름 설정 $ git config --global user.name "{username}"
사용자 이메일 설정 $ git config --global user.email "{emailaddr}"
기본 텍스트 편집기 설정 $ git config --global user.editor "vim"
(Nano: nano, VSC: code --wait, Notepad++: notepad++.exe)
Git 출력 방식 변경 (기본값: less) $ git config --global user.pager "cat"
- less: 화면을 넘겨가며 확인
- cat: 출력 결과 터미널에 그대로 표시
현재 설정된 Git 환경 정보 확인 $ git config --list
설정 파일 직접 수정 $ vi ~/.gitconfig
How to Start
- 원격 저장소(GitHub, GitLab 등)를 로컬 컴퓨터에 복제
$ git clone {username/repo-addr} - 복제한 저장소의 디렉토리로 이동
$ cd {repo-addr} - 저장소 내의 파일 수정
$ vi README.md - 현재 작업 디렉토리의 상태 확인 (변경, 추가 삭제 상태 표시)
$ git status - 수정된 파일을 스테이징 영역에 추가 (커밋 준비 단계)
$ git add README.md - 스테이징된 파일을 저장소에 커밋 (변경사항 기록하는 스냅샷)
$ git commit - 로컬 저장소에서 만든 커밋을 원격 저장소로 푸시
$git push origin main
Conventional Commits
- commit의 제목은 commit을 설명하는 문장형이 아닌 구나 절의 형태로 작성
- Importance of Capitalize
- prefix 달기
- feat: 기능 개발 관련
- fix: 오류 개선 혹은 버그 패치
- docs: 문서화 작업
- test: 테스트 관련
- conf: 환경설정 관련
- build: 빌드 작업 관련
- ci: Continuous Integration 관련
- chore: 패키지 매니저, 스크립트 등
- style: 코드 포매팅 관련
- !: Breaking Change(기존 코드와 호환되지 않은 변경 사항)
참고) https://www.conventionalcommits.org/ko/v1.0.0/
Conventional Commits
커밋 메시지에 사용자와 기계 모두가 이해할 수 있는 의미를 부여하기 위한 스펙
www.conventionalcommits.org
Characteristics of Git
- 단순한 구조와 빠른 속도
- 분산형 저장소 지원
- 비선형적 개발(수천개의 브랜치) 가능
- 오프라인 작업 가능
- GitHub, GitLab, Bitbucket 같은 클라우드 기반 협업 플랫폼 지원
source: https://docs.getdbt.com/docs/collaborate/git-version-control"
Pros of Git
- 소스코드 주고받지 않고도 동시 작업 가능
- 수정 내용은 commit 단위로 관리하여 배포는 물론 원하는 시점으로 Checkout 가능
- 새로운 기능 개발을 Branch로 관리하여 성공적으로 개발이 완료되면 Main Branch에 Merge하여 반영
- 인터넷이 연결 없이도 개발 가능
Git Workflow
source: https://cloudstudio.com.au/2021/06/26/git-command/"
Local
1. Working Directory
- 파일을 수정하거나 작업하는 영역
- 수정된 파일을 Untracked(추적되지 않음) 상태
- 수정 후, 파일을 Staging Area로 올리기 위해 git add 명령어 사용
2. Staging Area
- 커밋 준비가 된 파일들이 올라가는 공간
- git add를 통해 특정 파일이나 모든 파일을 스테이징할 수 있음
- 이후 git commit 명령으로 파일을 Local Repository로 저장
3. Local Repository
- 로컬에서 관리되는 Git 저장소
- git commit으로 파일의 변경 사항을 여기에 저장하며 commit 히스토리가 축적됨
- 원격 저장소로 변경 사항을 업로드하려면 git push를 사용
Remote
4. Remote Repository
- GitHub, GitLab 같은 서버에 있는 저장소
- 협업을 위해 여러 개발자들이 접근 가능
- 로컬에서 원격 저장소로 데이터를 보내기 위해 git push를 함
- 원격 저장소에서 데이터를 가져오기 위해 git pull이나 git fetch 사용
System is not Service
- Git은 System으로 버전 관리를 위한 도구
- Remote Repository는 Service로 Git의 데이터를 저장하고 협업 및 관리 기능을 제공