Git Warehouse directory.git 상세

  목차

1. 예제 환경

둘째, 디렉토리 구조

2.1 브랜치 디렉토리

2.2 COMMIT_EDITMSG 파일

2.3 구성 파일

2.4 설명 파일

2.5 HEAD 파일

2.6 후크 디렉토리

2.7 색인 파일

2.8 정보 디렉토리

2.9 로그 디렉토리

2.10 개체 디렉터리

2.11 refs 디렉토리

3. 참고 문헌


Git은웨어 하우스를 생성 할 때 현재웨어 하우스 디렉터리에 .git이라는 숨겨진 디렉터리를 생성하여웨어 하우스 구성 및 데이터 정보를 저장합니다. 이 기사에서는 예제와 함께 Git 저장소의 기본 디렉토리를 소개합니다.

1. 예제 환경

다음 예제는 모두 다음 환경에서 수행됩니다.

시스템 환경 : CentOS Linux 릴리스 7.6.1810 (코어)

git 버전 : git 버전 1.8.3.1

원격웨어 하우스 : GitHub.

둘째, 디렉토리 구조

git init 명령을 사용하여웨어 하우스를 초기화합니다. 초기 디렉토리 (.git) 구조는 다음과 같습니다.

[root@192 testgit]# tree .git
.git
├── branches
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── info
│   └── exclude
├── objects
│   ├── info
│   └── pack
└── refs
    ├── heads
    └── tags

9 directories, 13 files
[root@192 testgit]# 

 이 초기화 된웨어 하우스는 dev-branch 브랜치가 생성되고 푸시 될 때 디렉토리 구조는 다음과 같습니다.

[root@192 testgit]# tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── HEAD
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   └── update.sample
├── index
├── info
│   └── exclude
├── logs
│   ├── HEAD
│   └── refs
│       ├── heads
│       │   ├── dev-branch
│       │   └── master
│       └── remotes
│           └── origin
│               └── master
├── objects
│   ├── 2d
│   │   └── d2c71b69c837a7459f4bd9c9f7db6520731d06
│   ├── 5c
│   │   └── 7b8eda18a75e13d27c31e65a54b0abd7948510
│   ├── 77
│   │   └── cad3aecf7c2754231095598119979d62a1e1da
│   ├── info
│   └── pack
└── refs
    ├── heads
    │   ├── dev-branch
    │   └── master
    ├── remotes
    │   └── origin
    │       └── master
    └── tags

19 directories, 25 files
[root@192 testgit]# 

다음으로 각 디렉토리와 파일에 대해 자세히 소개합니다.

2.1 브랜치 디렉토리

기본적으로 현재 사용되지 않는 git fetch, git pull 및 git push의 URL을 지정하는 데 사용되는 드물게 스토리지 속기 방법입니다.

2.2 COMMIT_EDITMSG 파일

대문자를 소문자로 변경하면 이해하기 쉽습니다. commit_editmsg : commit edit information, only record the latest commit edit information, for example :

[root@192 testgit]# vim README
[root@192 testgit]# git add .
[root@192 testgit]# git commit -m "modify README file"
[master 2392c4d] modify README file
 1 file changed, 2 insertions(+), 1 deletion(-)
[root@192 testgit]# git push origin master
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 315 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:New-World-2019/testgit.git
   3cbe67c..2392c4d  master -> master
[root@192 testgit]# cat .git/COMMIT_EDITMSG 
modify README file
[root@192 testgit]# 

위의 예에서 먼저 README 파일을 수정 한 다음 원격으로 푸시하고 커밋 할 때 "modify README file"을 작성한 다음 COMMIT_EDITMSG 파일을보고 제출할 때 비고를 저장합니다. 

2.3 구성 파일

이름을보고 현재 창고의 구성 정보를 저장하기 만하면됩니다. git 구성 파일은 다음과 같은 세 계층으로 나뉩니다.

  1. / etc / gitconfig 파일 : 각 사용자 및 해당웨어 하우스의 시스템 일반 구성;
  2. ~ / .gitconfig 또는 ~ / .config / git / config 파일 : 현재 사용자 의웨어 하우스 구성.
  3. .git / config 파일 (현재웨어 하우스 아래) : 현재 사용자의 현재웨어 하우스 구성

최하위 계층이 가장 높은 우선 순위를 가지며 상위 계층 구성 정보를 덮어 씁니다. 위 파일은 git config 매개 변수를 통해 수정할 수 있습니다. 구성 가능한 정보에는 사용자 정보, http 정보, 창고 정보 등이 포함됩니다.

[root@192 testgit]# cat ~/.gitconfig 
[user]
        name = New-World-2019
        email = [email protected]
[http]
        postBuffer = 1048576000
        lowSpeedLimit = 0
        lowSpeedTime = 999999
[root@192 testgit]# cat .git/config 
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = [email protected]:New-World-2019/testgit.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branch "dev-branch"]
        remote = origin
        merge = refs/heads/dev-branch
[root@192 testgit]# git config --list
user.name=New-World-2019
[email protected]
http.postbuffer=1048576000
http.lowspeedlimit=0
http.lowspeedtime=999999
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:New-World-2019/testgit.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
branch.dev-branch.remote=origin
branch.dev-branch.merge=refs/heads/dev-branch
[root@192 testgit]# 

위의 예에서 / etc / gitconfig 파일이 시스템에 생성되지 않은 경우 인쇄되지 않습니다. 현재웨어 하우스에서 git config --list 명령의 결과가 ~ / .gitconfig 및 .git / config 파일의 합계임을 알 수 있습니다. 더 많은 구성 정보가 필요한 경우 git config 명령을 통해 자세히 알아볼 수 있습니다.

2.4 설명 파일

GitWeb에서 프로젝트 설명 정보를 표시하는 데 사용됩니다. 기본 콘텐츠는 다음과 같습니다.

Unnamed repository; edit this file 'description' to name the repository.

2.5 HEAD 파일

현재 분기를 가리 키도록 HEAD 포인터를 저장합니다. 즉, 현재 활성 분기를 기록합니다. 예를 들면 다음과 같습니다.

[root@localhost testgit]# git status
# 位于分支 master
无文件要提交,干净的工作区
[root@localhost testgit]# cat .git/HEAD 
ref: refs/heads/master
[root@localhost testgit]# git checkout dev-branch
切换到分支 'dev-branch'
[root@localhost testgit]# cat .git/HEAD 
ref: refs/heads/dev-branch
[root@localhost testgit]# 

위의 예에서는 마스터 브랜치에서 시작했는데 dev-branch 브랜치로 전환 한 후 .git / HEAD 파일의 내용은 refs / heads / dev-branch가됩니다.

2.6 후크 디렉토리

디렉터리에는 많은 후크 파일 (일부 스크립트)이 저장되어 있습니다. 이러한 파일은 다양한 Git 명령에서 사용되는 사용자 지정 스크립트이며 commit, rebase, pull) 작업 전후와 같은 Git의 특정 단계에서 자동으로 실행될 수 있습니다. 일부 샘플 후크는 git init를 실행할 때 설치되지만 기본적으로 모두 비활성화되어 있습니다. 활성화하려면 파일 .sample 접미사를 삭제해야합니다.

2.7 색인 파일

임시 저장 영역 (스테이지), 바이너리 파일.

2.8 정보 디렉토리

저장소의 다른 정보는이 디렉토리에 기록됩니다.

info / exclude :  .gitignore와 유사한 지정된 모드의 파일을 무시하지만 .gitignore는 각 디렉토리에 따라 다릅니다.

2.9 로그 디렉토리

업데이트 된 모든 참조 레코드를 저장합니다. 디렉토리 구조는 다음과 같습니다.

[root@localhost logs]# tree
.
├── HEAD
└── refs
    ├── heads
    │   ├── dev-branch
    │   └── master
    └── remotes
        └── origin
            ├── dev-branch
            └── master

4 directories, 5 files
[root@localhost logs]# 

이 중 HEAD는 분기 전환을 포함한 모든 변경 기록을 기록하고, 로컬 및 원격 분기의 변경 기록을 logs / refs 아래에 저장합니다. 

2.10 개체 디렉터리

Git은 콘텐츠 주소 지정이 가능한 파일 시스템입니다. Git의 핵심 부분은 간단한 키-값 데이터 저장소입니다. 모든 유형의 콘텐츠를 Git 저장소에 삽입 할 수 있으며 언제든지 콘텐츠를 다시 검색 할 수있는 고유 키를 반환합니다.

간단히 이해하면 객체 디렉토리는 Git 데이터베이스 (map [key] = value의 형태로 상상할 수있는 키-값 쌍 데이터베이스)입니다. 콘텐츠는 키에 따라 액세스되고 키는 SHA1에 의해 계산 된 값. 이 디렉터리에는 데이터 개체 (blob 개체), 트리 개체 (트리 개체) 및 커밋 개체 (커밋 개체)의 세 가지 종류의 개체 (최대)가 저장됩니다.

(1) 정보 및 팩 디렉토리

저장된 파일이 매우 클 때 git은 파일을 압축하여 info 및 pack 아래에 저장합니다.

(2) 2 문자 명령어 디렉토리

첫째,이 두 글자는 계산 된 SHA1 값의 처음 두 글자 (총 40 자)이고 나머지 38자는 디렉터리의 파일 이름입니다.

2.11 refs 디렉토리

(1) 헤드 디렉토리

디렉토리에는 각 로컬 브랜치 이름을 따서 명명 된 파일 이 포함되어 있으며 해당 브랜치의 최근 제출 된 ID (SHA1 알고리즘에 의해 계산 된 문자열)가 저장됩니다.

(2) 원격 디렉토리

디렉토리에는 각 원격 지점 이름을 따서 명명 된 파일 이 포함되어 있으며 해당 지점의 최근 제출 ID 및 heads 디렉토리의 원칙을 저장합니다.

(3) 태그 디렉토리

개발 과정에서 만들어진 태그를 저장하고, 내부 파일은 태그 이름으로 명령하고 파일의 내용은 해당 ID입니다.

3. 참고 문헌

[1]  Git의 설명 파일은 무엇입니까?

[2]  gitignore

[3]  자식 가지

[4]  gitrepository 레이아웃

 

 

 

 

추천

출처blog.csdn.net/u011074149/article/details/109406589