Git 교과서

코드 이력, 하나도 놓치지 마라!

버전 관리 시스템의 이해와 설치부터 커밋, 브랜치, 임시 처리, 병합, 복귀, 서브모듈, 태그까지
깃, 소스트리, 깃허브로 실습하며 기본기를 탄탄하게 다진다!

Yes24 교보문고 알라딘 인터파크 길벗

숨겨진 폴더


깃의 init 명령은 일반 폴더를 깃 저장소로 변경을 합니다. 깃은 깃 저장소로 변경할때 이력을 기록할 수 있는 특수한 폴더를 하나 생성합니다. .git으로 생성된 숨김 폴더에 대해서 자세히 알아 보도록 하겠습니다.


.git 폴더 확인하기


깃 저장소에 생성된 .git폴더를 확인해 보도록 하겠습니다.
먼저 깃 베시 터미널을 실행합니다. 생성한 깃 저장소 폴더로 이동을 합니다.

infoh@hojin1 MINGW64 /c/d/git
$ cd jinygit03/

infoh@hojin1 MINGW64 /c/d/git/jinygit03 (master)

깃 저장소에서 ls 명령어로 파일 목록을 출력해 봅니다.

$ ls

생성된 저장소에 어떠한 작업을 하지 않았기 때문에, 아무런 내용이 출력되지 않습니다.

ls 명령어는 파일 목록을 출력하는 리눅스 명령어입니다.

하지만, 깃 저장소에는 이미 .git이라는 폴더 하나가 존재합니다. 이 폴더는 숨겨진 폴더로 일반적인 ls 명령어로 볼 수 없습니다. 이를 보기 위해서는 추가 옵션을 부여해 주어야 합니다.

이번에는 -a 옵션을 추가하여 입력합니다.
-a 옵션은 폴더 안의 숨겨진 파일을 같이 출력하라는 의미입니다.

infoh@hojin1 MINGW64 /c/d/git/jinygit03 (master)
$ ls -a
./ 
../ 
.git/

이전 결과와 달리 목록에 .git이라는 숨겨진 폴더가 하나 있는 것을 확인할 수 있습니다.
보통 폴더 이름 앞에 점(.)이 있으면 숨겨진 폴더를 의미합니다.

깃 저장소를 초기화한다는 것은 별도의 숨겨진 폴더를 하나 추가하고 환경 설정 파일을 생성하는 것입니다.


깃의 골격파일


깃이 폴더내에 숨겨진 .git폴더를 생성하는 것은, 깃이 내부적으로 코드의 상태 이력을 저장하기 위한 영역이 필요해서 입니다. 깃은 코드의 상태이력을 데이터베이스와 같은 시스템을 이용하지 않고, 자체적인 파일로 저장을 합니다.

실습 저장소에서 .git폴더로 이동을 해봅니다.

infoh@hojin1 MINGW64 /c/d/git/jinygit03 (master)
$ cd .git

infoh@hojin1 MINGW64 /c/d/git/jinygit03/.git (GIT_DIR!)
$ ls
HEAD  config  description  hooks/  info/  objects/  refs/

.git 폴더 안에는 다양한 파일과 폴더들이 존재합니다. 깃은 생성한 .git폴더에 파일로 변경이력을 저장할 수 있는 몇개의 파일을 생성합니다.

숨겨진 폴더인 .git 폴더에는 깃 저장소에 필요한 모든 뼈대 파일이 담겨 있습니다. 이는 깃의 데이터를 기록하고 관리하는 뼈대가 되는 중요 파일입니다. 그리고 이러한 중요 파일들을 일일이 수작업을 만들 필요 없이, 깃의 init 명령어로 손쉽게 자동 생성 할 수 있는 것입니다.


깃 저장소 복제 또는 이동


깃 저장소의 .git폴더는 깃의 모든 이력을 기록 관리 합니다. 만일 깃의 저장소를 다른 곳으로 복사를 하거나 이동을 할려고 할때, 숨겨진 .git 폴더도 같이 복사해 주어야 합니다.

만일, 실수로 저장소의 .git폴더를 삭제하게 되면 깃의 모든 이력이 없어집니다. 저장소에 .git를 삭제하게 되면 일반 폴더와 동일한 폴더가 됩니다.

.git은 숨겨진 폴더로 사용자에게 쉽게 노출되지 않습니다. 그렇기 때문에 실수로 .git 폴더를 제외하고 복사하거나 이동하는 경우가 많이 발생합니다. 실수를 방지하기 위해서 윈도우에서 숨김영역 보기를 체크하거나, 리눅스에서 파일을 복사할때 -r옵션을 같이 사용합니다.

Note: 숨겨진 폴더까지 같이 복사하려면 일반적인 cp 명령어로는 할 수 없습니다.
-r 옵션을 사용해야 숨겨진 폴더도 함께 복사됩니다.

$ cp -r 원본폴더 복사폴더