본문 바로가기

Git & Github

Git Init

 

git init 명령어는 새로운 Git 리포지토리를 초기화할 때 사용하는 명령어입니다. 이 명령어를 실행하면 지정된 디렉토리가 Git 리포지토리로 설정되고, 이 디렉토리의 파일과 폴더를 버전 관리할 수 있게 됩니다.

  1. 새로운 리포지토리 생성
    • git init 명령어를 실행하면 현재 디렉토리(또는 지정한 디렉토리)에 .git이라는 숨겨진 폴더가 생성됩니다. 이 폴더는 Git이 파일 변경사항을 추적하는 데 필요한 모든 정보를 포함하고 있습니다.
  2. 로컬 리포지토리로 설정
    • 해당 디렉토리는 로컬 리포지토리로 변환되어, 커밋을 통해 파일을 버전 관리할 수 있습니다. 로컬 리포지토리 내에서 작업을 진행하고, 나중에 원격 리포지토리(예: GitHub)와 연결할 수 있습니다.
  3. 이후 작업
    • git init을 실행한 후에는 git add, git commit 등의 명령어를 통해 파일을 추가하고 변경 내역을 기록할 수 있습니다.

mkdir 명령어로 새로운 디렉토리를 만들고 cd 명령어로 해당 디렉토리로 이동하여 git init을 실행합니다. 

mkdir second-repo
cd second-repo
git init

 

새로 만들어진 second-repo 경로에 가서 숨겨진 항목을 표시해 보면 .git 폴더를 볼 수 있고 .git 폴더 안의 구성요소는 다음과 같습니다. 

 

.git 폴더는 Git 리포지토리의 모든 버전 관리 정보를 담고 있는 숨겨진 디렉토리로, Git이 파일 변경 사항을 추적하고 관리할 수 있도록 여러 구성 요소로 이루어져 있습니다. .git 폴더의 주요 구성 요소는 다음과 같습니다.

1. HEAD

  • HEAD 파일은 현재 체크아웃된 브랜치를 가리키고 있습니다. 기본적으로 HEAD는 refs/heads/main 또는 refs/heads/master(혹은 현재 체크아웃된 다른 브랜치)를 가리킵니다.
  • 이 파일을 통해 Git은 현재 작업 중인 브랜치와 마지막 커밋을 인식합니다.

2. config

  • config 파일은 현재 리포지토리에 대한 설정을 담고 있습니다. 예를 들어, 원격 리포지토리 주소, 사용자 이름, 이메일 정보, 브랜치 설정 등이 포함됩니다.
  • 전역 설정(git config --global)은 이 파일에 저장되지 않고, 시스템 전체에 적용되는 .gitconfig 파일에 저장됩니다.

3. objects

  • objects 디렉토리는 Git의 모든 데이터(커밋, 트리, 블롭 등)를 해시 값으로 저장하는 곳입니다. 각 커밋의 스냅샷, 파일 콘텐츠 등 모든 버전 정보가 여기 저장됩니다.
  • Git은 해시 값으로 파일을 관리하기 때문에 변경 사항을 효율적으로 추적하고 저장할 수 있습니다.

4. refs

  • refs 디렉토리에는 브랜치(heads), 태그(tags), 원격 브랜치(remotes)에 대한 참조 정보가 저장됩니다.
  • refs/heads/에는 각 브랜치가 가리키는 커밋의 해시 값이 저장되고, refs/tags/에는 태그 정보가 기록됩니다.
  • Git은 이 정보를 통해 브랜치와 태그를 구분하고 각각의 위치를 추적합니다.

5. hooks

  • hooks 디렉토리는 Git 훅(Hooks)을 설정하는 곳으로, 특정 Git 이벤트 발생 시 자동으로 실행되는 스크립트입니다. 예를 들어, 커밋 전 검사(pre-commit), 커밋 이후(post-commit), 푸시 전(pre-push) 등 다양한 훅을 설정하여 자동화할 수 있습니다.
  • 훅은 파일 형식으로 제공되며, 원하는 작업을 스크립트로 작성해 추가할 수 있습니다.

6. description

  • description 파일은 리포지토리 설명을 담고 있지만, 기본적으로 GitHub와 같은 원격 서버에서는 사용되지 않습니다. 주로 GitWeb과 같은 웹 인터페이스에서 리포지토리 설명으로 표시됩니다.

7. info

  • info 디렉토리에는 리포지토리에 대한 추가 정보를 담는 파일들이 들어 있습니다. 예를 들어, .git/info/exclude 파일은 Git이 추적하지 않길 원하는 파일을 지정하는 파일로, .gitignore 파일과 비슷하지만, 리포지토리 외부로 공유되지 않습니다.

[참고] 

git de-init

Git 서브모듈을 비활성화하거나 연결을 해제할 때 사용하는 명령어입니다. de-init이라는 명령어 자체는 존재하지 않지만, 서브모듈을 관리하는 **git submodule deinit**이라는 명령이 있습니다.

'Git & Github' 카테고리의 다른 글

Git 스테이징  (0) 2024.11.11
Git Repository Clone  (0) 2024.11.11
Git Repository Fork  (0) 2024.11.11
Github repository 만들기  (1) 2024.11.10