Git은 사용자의 이름이나 이메일 주소 등의 정보를 커밋시 함께 보낸다. 따라서 이런 정보를 기록해둬야 한다. 이런 종류의 정보 혹은 사용자 커스텀 명령어들을 저장할 때는 config 명령을 이용한다.
git config --global user.name "blaxsior"
git config --global user.email "blabla@tistory.com"
--global 옵션을 주면, 해당 설정은 현재 사용자의 모든 저장소 설정에 적용된다. 만약 현재 저장소에 대해 다른 옵션을 주고 싶다면, 해당 저장소 폴더에서 --global 옵션 없이(자동으로 --local이 적용) 설정하면 된다.
깃 폴더
특정 폴더에 대해 Git 시스템을 이용하기 위해서는 init 명령어를 이용한다.
git init //가장 기본. 현재 폴더에 git을 적용한다.
git init name // name 폴더를 git 폴더로 만든다.
깃 폴더를 생성하고 나면, 해당 폴더에 .git 폴더가 숨겨진 상태로 생성된다.
.git 폴더는 해당 폴더의 파일들에 대한 변경 이력이 기록되어 있다. 스냅샷 형태로 저장된 이 기록을 기반으로, Git은 해당 폴더에 대한 버전 관리를 진행한다. 만약 이 폴더를 삭제하면, 단순히 버전관리가 수행되지 않는 일반 폴더가 된다.
폴더의 구분
Git은 VCS의 특성에 의해 저장 공간을 크게 3개 공간으로 논리적으로 분리한다.
- Working Directory : 실제 파일이 저장되고 수정되는 공간. 일반적으로 우리가 사용하는 폴더.
- Staging Area : 커밋되지 않은 코드를 임시로 저장하는 영역.
- Repository : 실제로 저장 및 기록하는 공간. 버전 관리 관련 정보가 담긴다.
파일의 구분
Git을 통해 파일을 관리할 때, 각각의 파일들도 특정 상태를 가지게 된다. 특정 파일은 크게 "추적" 여부로 tracked, untracked로 나뉠 수 있다. 이때 tracked 파일들 안에서도 stage 여부에 따라 또 나뉜다.
- Untracked : 추적되지 않는 상태. Git의 관리 대상에서 제외되어 수정 내역이 추적되지 않는다.
- Tracked : Git에 의해 추적되는 상태. 수정 여부에 대한 추적이 이루어진다.
Git은 폴더 내에 파일이 추가되더라도 이를 자동적으로 추적하지는 않는다. 굳이 추적할 필요가 없는 이미지 파일 등의 사소한 변화나 단순한 로그에 대해 Git 시스템이 반응하여 이를 모두 기록하기에는 부하가 크다. 이런 문제들로 인해 Git은 자동으로 모든 파일을 추적하는 대신 사용자에게 원하는 파일을 직접 지정하기를 요구한다.
따라서 새로 생성된 파일에 대해서도 Git의 추적을 원한다면, 이를 untracked 상태에서 tracked 상태로 바꿔야 한다. 반대로, 추적되고 있는 파일을 더 이상 추적하지 않고 싶을 때 역시 명령을 통해 untracked 상태로 바꿔야 한다. 이때 각각의 상태를 만드는 방법은 다음과 같다.
//#1 untracked -> tracked
git add <filename>
//#2 tracked -> untracked
git rm --cached <filename>
스테이지
스테이지는 Working Directory 와 Repository 중간에 있는 임시 영역으로, 전자에서 작업이 끝난 파일의 내용 중 추정 상태와 관련된 정보들만을 기록해둔다. 이후, 이런 정보를 기반으로 Repository는 변경된 차이점을 기록한다.
파일의 스테이지 상태는 status 명령어를 통해 확인 가능하다.
git status // 파일들의 상태를 보여준다
git ls-files --stage // stage 상태의 파일만 보여준다. 옵션이 없으면 관리중인 파일들을 보여준다.
Tracked 상태에 있는 파일들은 stage 및 unstage 상태로 구분된다. 최종 파일이 stage일 때만 반영한다.
- Stage : 내용이 Repository와 차이가 있고, commit 대상이 되는 파일
- Unstage : 내용이 Repository와 차이가 있으나, 아직 commit 대상은 아닌 파일
이때 stage와 unstage의 상태를 바꾸는 방법은 다음과 같다.
//01. unstaged -> staged
git add <filename>
//02. staged -> unstaged
git restore --staged <filename>
Modified 상태
깃은 수정된 파일과 원본 파일을 구분하기 위해 modified / unmodified 상태를 이용한다. 이때 modified는 원본에 대해 수정된 점이 있는 파일이고, unmodified는 원본과 다르지 않은 파일을 의미한다.
- Modified : 원본에 대해 수정된 상태.
- Unmodified : 원본에 비해 수정된 점이 없는 상태.
이전에 Git 은 Tracked 상태의 파일에 대해서만 수정 여부를 체크한다고 언급했다. 마찬가지로 Modified / Unmodified의 판단은 해당 파일이 track 상태 하에 있을 때만 가능하다.
이를 총 종합하면 다음과 같다.
- untracked : git에 의한 수정 내역의 기록 대상에 등록되지 않은 상태
- tracked : git에 의한 수정 내역 기록 대상인 상태
- unmodified : tracked 상태의 파일 중 원본에 대해 수정된 점이 없는 상태
- modified : tracked 상태의 파일 중 수정된 부분이 있는 상태
- unstaged : modified 상태의 파일 중 commit 대상으로 지정되지 않은 상태
- staged : modified 상태의 파일 중 commit 대상으로 지정된 상태
이외의 사용할만한 코드들을 정리한다.
//01. status를 짧게 보기
git status -s / --short
//02. 수정 내역 보기
git diff //unstaged 에 대해
git diff --staged/--cached //staged 에 대해
//03. 에디터를 이용하여 config 수정
git config [--global] -e
//04. 기본 에디터를 vscode로 사용
git config --global core.editor "code -w"
'잡다 > git' 카테고리의 다른 글
[Git 06] Alias (0) | 2021.10.31 |
---|---|
[Git 05] remote (0) | 2021.10.30 |
[Git 04] commit (0) | 2021.10.30 |
[Git 03] .gitignore 파일 (0) | 2021.10.29 |
[Git 01] 버전관리 시스템 (0) | 2021.10.29 |