[9주차] 2023.10.16 (월)
🔷 GIT 🔷
1. 파일 관리
(1) 코드 기록을 추적 가능하다.
(2) 팀 단위의 협업이 가능하다.
(3) 의도하지않은 덮어쓰기를 방지하고 코드 변경 사항을 기록할 수 있다.
2. 버전 관리 시스템(Version Control System) or 형상관리도구 : 변화를 시간에 따라 기록하고 특정 시점의 버전을 다시 꺼내올 수 있는 시스템 => 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구 가능
3. Git 구성 요소
(1) 저장소 : 모든 변경사항을 추적하는 "컨테이너"
(2) 스테이징 영역(인덱스)
1) 커밋이 준비되는 공간
2) 작업 디렉토리의 파일과 저장소의 파일을 비교
(3) 작업 디렉터리 / 작업 트리 : 작업중인 공간
4. Git 의 3가지 상태
(1) Committed : 데이터가 로컬에 안전하게 저장된 상태
(2) Staged: 수정된 데이터를 저장할 것이라고 표시한 상태
(3) Modified : 수정된 데이터가 로컬에 저장되지 않은 상태
5. Git Bash (Linux) 명령어
clear : 화면 지우기
pwd : 현재 위치
ls, ls -al : 파일 목록
🔷 GIT 연습 🔷
★ Git Bash (Linux) 명령어 ★
# 화면 지우기
$ clear
# 현재 위치
$ pwd
# 파일 목록
$ ls
$ ls -al
# 이전 입력한 명령어 보기
$ history
1. Git 최초 설정
(1) 사용자 정보
$ git config --global user.name (사용자명)
$ git config --global user.email (이메일)
(2) 설정 확인
$ git config --list
$ git config user.name
$ git config user.email
(3) 설정이 저장된 파일 : .gitconfig
2. Git CRUD 연습
(1) 저장소 생성(git init)
$ git init
(2) 파일 등록 ( Untracked => Tracked / Staged ) (git add) = 스테이징(Staging)
$ git add (파일이름)
(3) 저장하기(git commit)
# 모두 커밋 #
$ git commit
# 파일 하나 지정해서 커밋 #
$ git commit -m (파일이름)
# unstaged 상태의 파일 모두 커밋 #
$ git commit -a -m (파일이름)
=> 편집기(VI) 나가기 : esc -> :q 입력 -> Enter
(4) 수정하기(git vi)
$ vi (파일이름)
=> 편집기(VI) 수정 후 나가기 : esc -> :wq 입력 -> Enter
(5) 상태 확인
1) 단순한 파일의 변경사실 확인(git status)
$ git status
2) 라인 수정 등 내용을 확인(git diff)
$ git diff
$ git diff --staged
(6) 파일 삭제(git rm)
# 파일 삭제 #
$ git rm (파일이름)
# Staged 상태인 파일 강제삭제 #
$ git rm -f (파일이름)
(7) 파일 이름 변경(git mv)
# 1
$ git mv (기존파일명) (변경파일명)
# 2
$ mv (기존파일명) (변경파일명)
(8) 되돌리기
# 메시지, 누락된 파일 #
$ git commit --amend
# 스테이징 취소 #
$ git reset HEAD (파일명)
# 커밋 삭제 #
$ git reset HEAD ^
# 마지막 커밋 상태로 복구 #
$ git checkout --(파일명)
3. 기존 저장소 Clone
(1) git 저장소를 복사하는 기능
(2) 다른 VCS 와의 차이점은 프로젝트 모든 히스토리를 받아온다는 것.
4. 로그 출력(git log)
★ 주요 옵션 ★
(1) 커밋한 작업들 보기
$ git log
(2) 커밋별 diff 정보, 개수 지정
$ git log -p -1
(3) 커밋별 통계 정보
$ git log --stat -2
(4) 기본 형식 외의 다양한 모습으로 출력
$ git log --pretty=oneline
(5) 출력 형식을 직접 지정 후 출력
$ git log --pretty=format: (출력 형식)
# ex
$ git log --pretty=format: "%h - %an, %ar : %s"
=> 옵션
- 커밋 해시 : 커밋과 관련된 모든 내용을 포함하는 식별자
- 트리 해시 : 파일 및 폴더 구조에 대한 내용을 포함하는 식별자
- 부모 해시 : 커밋 간의 관계 정보를 포함하는 식별자
(6) 그래프 출력
$ git log --graph
5. 리모트 저장소 확인하기
(1) 등록된 리모트 저장소 확인
$ git remote
# 목록보기
$ git remote -v
(2) 기존 워킹 디렉토리에 새 저장소 추가
$ git remote add [단축이름] [url]
6. 브랜치(Branch) : 원래 코드와는 상관없이 독립적으로 개발하도록 지원해주는 것 =>새로운 버전을 출시, 새로운 기능을 추가, 버그 수정 시 사용
# 로그 조회
$ git log --oneline --decorate
$ git log --oneline --decorate --graph --all
(1) 브랜치 생성하기
$ git branch (브랜치 이름)
(2) 브랜치 조회하기
$ git branch
(3) 브랜치 이동하기
$ git checkout (브랜치 이름)
(4) 브랜치 합치기(Merge)
# git checkout master (Merge 를 수행할 운영 브랜치로 이동)
$ git merge (합칠 브랜치 이름)
(5) 브랜치 삭제
git branch -d (브랜치 이름)
(6) 충돌(Conflict)
1) Merge 도구를 이용하여 충돌을 해결
git mergetool
2) 일반 편집기를 사용하여 충돌을 해결
- 위쪽 : Head 버전(merge 명령을 실행한 브랜치)의 내용
- 아래쪽 : testing 브랜치의 내용
=> 위쪽이나 아래쪽 내용 중에서 고르거나 새로 작성하여 Merge