Git ==== ## 개요 Git은 2021년 현재 가장 많이 쓰이는 버전 관리 소프트웨어다. ## 개념 ### worktree 다른 버전 관리 시스템과 달리, git은 크게 3가지 공간에서 파일을 다룬다. 저장소(repository)는 작업한 내용(파일 추가, 수정 등)이 저장되는 실제적 공간이다. 저장소의 작업 내용은 `.git` 디렉토리 안에 저장된다. 워크트리(worktree)는 사용자가 실제로 작업을 수행하는 공간을 뜻한다. 워크트리에서 수정한 내용을 저장소에 반영하기 위해서는, 워크트리의 수정 사항 중 실제로 반영할 내용을 지정하게 된다. 이 단계를 `stage`라 칭한다. 즉 모든 수정된 파일이 자동으로 `stage`되지는 않는다. stage를 위해 마련된 가상의 공간을 인덱스(index)라 한다. 즉, 최종적으로 저장소에 commit하였을 때 반영되는 내용은 워크트리가 아닌 인덱스에 존재하는 내용이다. #### worktree 지정 git은 기본적으로 (로컬)저장소와 워킹트리가 같은 장소에 있다. 즉 .git 디렉토리는 워킹트리의 하위에 위치하며, 다른 파일들과 혼동하지 않도록 숨김처리되어 있다. 그러나, 원한다면 저장소와 워킹트리의 root를 따로 지정할 수 있다. 예를 들어 `/repo/test` 디렉토리에 저장소를 만들고, `/repo/test/workingtree` 폴더의 내용을 작업한다고 한다면, `/repo/test` 디렉토리에서 `git --work-tree './workingtree'`로 지정하여 명령어를 수행하면 된다. 이 때, 원격 저장소에 push되는 내용은 `/repo/test`가 아닌 `/repo/test/workingtree`를 루트 디렉토리로 간주한다. ## 명령어 - `git status`: 현재 git 상태. - `git branch `: ``란 이름으로 새로운 브랜치를 생성한다. - `git checkout `: `` 브랜치로 전환한다. - `git checkout -b ` 옵션을 사용하면 브랜치 생성과 전환을 동시에 수행한다. - `git push`: 로컬 저장소의 커밋 내용을 리모트에 업로드한다. - `git config`: git 설정을 관리. - `git config --list`: 현재 git 설정값을 출력.