깃 저장소는 겉으로는 일반 폴더와 비슷하지만 별도의 숨겨진 영역이 있어 이 곳에서 버전 관리 시스템에 필요한 파일 변경이력을 기록한다. 따라서 저장소는 프로젝트의 모든 리비전과 히스토리를 가진 데이터베이스와 같다고 할 수 있다. 즉, 일반 폴더와 깃 저장소의 차이는 숨겨진 영역의 여부이다.
git init 경로명 // 현재 폴더 초기화 시 경로명x
깃은 VCS의 특성 때문에 저장공간을 논리적으로 분리한다. 크게 작업 공간(
working
), 임시 저장 공간(stage
), 실제 저장하는 공간(repository
)로 나눌 수 있는데 이를 통해 깃의 동작과 이력을 좀 더 효율적으로 처리할 수 있다.
untracked
상태tracked
상태git add
명령어를 이용해 추적되지 않는 상태의 파일들을 추적 상태로 변경해 주어야 한다.워킹 디렉토리에서 제출된 tracked 파일들을 관리하는 임시 저장 공간으로 워킹 디렉토리와 레포지토리 사이에 있는 영역으로 파일의 콘텐츠들을 직접 가지고 있진 않고 커밋하려는 파일의 추적 상태 정보들만 기록한다.
※ 스테이지를 별도 운영하는 이유!
-> 커밋을 빠르게 처리하기 위해서
-> 스테이지 상태는 status
명령어로 확인할 수 있다.
git status
git ls-files --stage // 다른 방법
unstage
상태stage
상태저장소를 다른 사람들과 공유할 때 워킹 디렉토리에 불필요한 파일이 생성되거나 보안에 민감한 파일들이 있다면 분리해서 관리해야 한다. 따라서 깃으로 관리하고 싶지 않은 파일과 폴더는 별도의 .gitignore 설정 파일 안에 나열해서 작성한다.
#
으로 시작하는 줄은 주석으로 처리# DB 파일 제외
dbinfo.php
*
기호를 사용하여 패턴을 정의. 모든 문자열을 대체할 수 있다. 글로빙 문자를 사용하여 패턴 확장# 모든 오브젝트 파일 제외
*.obj
!
) 를 사용한다. not과 같은 의미# 환경 설정 파일은 제외하면 안 됨
!config.php
/
) 기호 사용 (운영체제 마다 다름)# 현재 디렉토리 안에 있는 파일 무시
/readme.txt
# /pub/ 디렉토리 안의 모든 것을 무시
/pub/
# doc 디렉토리 아래의 모든 .txt 파일 무시
doc/**/*.txt
외부에 있는 기존 프로젝트를 기반으로 저장소를 생성하고 싶을 때 외부 저장소를 복제해서 생성할 수 있다.
git clone 저장소url 폴더이름
폴더 이름을 지정하지 않는다면 공개 저장소에서 사용된 폴더와 동일한 이름으로 새 폴더를 생성한다.