Git Warehouse Directory.git detailliert

  Inhaltsverzeichnis

1. Beispielumgebung

Zweitens die Verzeichnisstruktur

2.1 Das Zweigstellenverzeichnis

2.2 Datei COMMIT_EDITMSG

2.3 Konfigurationsdatei

2.4 Beschreibungsdatei

2.5 HEAD-Datei

2.6 Hooks-Verzeichnis

2.7 Indexdatei

2.8 Info-Verzeichnis

2.9 Protokollverzeichnis

2.10 Objektverzeichnis

2.11 refs Verzeichnis

3. Referenzen


Wenn Git ein Warehouse erstellt, erstellt es ein verstecktes Verzeichnis mit dem Namen .git im aktuellen Warehouse-Verzeichnis, in dem die Warehouse-Konfiguration und Dateninformationen gespeichert werden. In diesem Artikel wird das Basisverzeichnis des Git-Repositorys mit Beispielen vorgestellt.

1. Beispielumgebung

Die folgenden Beispiele werden alle in der folgenden Umgebung ausgeführt:

Systemumgebung: CentOS Linux Release 7.6.1810 (Core)

Git-Version: Git-Version 1.8.3.1

Remote Warehouse: GitHub.

Zweitens die Verzeichnisstruktur

Verwenden Sie den Befehl git init, um das Warehouse zu initialisieren. Die Struktur des Anfangsverzeichnisses (.git) lautet wie folgt:

[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]# 

 In diesem initialisierten Warehouse sieht die Verzeichnisstruktur wie folgt aus, wenn der Zweig dev-branch erstellt und gepusht wird:

[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]# 

Als nächstes wird jedes Verzeichnis und jede Datei detailliert vorgestellt.

2.1 Das Zweigstellenverzeichnis

Eine seltene Speicherkurzmethode, mit der die URL von git fetch, git pull und git push angegeben wird, die derzeit grundsätzlich nicht verwendet wird.

2.2 Datei COMMIT_EDITMSG

Es ist einfacher zu verstehen, wenn Sie Großbuchstaben in Kleinbuchstaben ändern: commit_editmsg: Informationen zur Festschreibungsbearbeitung, nur die zuletzt übermittelten Informationen zur Festschreibungsbearbeitung aufzeichnen, z.

[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]# 

Ändern Sie im obigen Beispiel zuerst die README-Datei, übertragen Sie sie dann auf die Fernbedienung, schreiben Sie beim Festschreiben "README-Datei ändern", zeigen Sie die Datei COMMIT_EDITMSG an und speichern Sie die Anmerkungen beim Senden. 

2.3 Konfigurationsdatei

Schauen Sie sich einfach den Namen an und speichern Sie die Konfigurationsinformationen des aktuellen Lagers. Die Git-Konfigurationsdatei ist in drei Ebenen unterteilt:

  1. / Etc / gitconfig Datei: System - allgemeine Konfiguration der einzelnen Benutzer und deren Lager auf;
  2. Datei ~ / .gitconfig oder ~ / .config / git / config: die Lagerkonfiguration des aktuellen Benutzers ;
  3. .git / config-Datei (unter dem aktuellen Warehouse): Die Konfiguration des aktuellen Warehouse des aktuellen Benutzers .

Die unterste Schicht hat die höchste Priorität und überschreibt die Konfigurationsinformationen der oberen Schicht. Die obigen Dateien können über den Parameter git config geändert werden. Die konfigurierbaren Informationen umfassen: Benutzerinformationen, http-Informationen, Lagerinformationen usw.

[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]# 

Wenn im obigen Beispiel die Datei / etc / gitconfig nicht im System erstellt wurde, wird sie nicht gedruckt. Es ist ersichtlich, dass das Ergebnis des Befehls git config --list im aktuellen Warehouse die Summe der Dateien ~ / .gitconfig und .git / config ist. Wenn Sie weitere Konfigurationsinformationen benötigen, können Sie über den Befehl git config mehr erfahren.

2.4 Beschreibungsdatei

Wird verwendet, um Projektbeschreibungsinformationen in GitWeb anzuzeigen. Der Standardinhalt lautet wie folgt:

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

2.5 HEAD-Datei

Speichern Sie den HEAD-Zeiger, um auf den aktuellen Zweig zu zeigen, dh zeichnen Sie den aktuell aktiven Zweig auf, zum Beispiel:

[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]# 

Im obigen Beispiel wurde es am Hauptzweig gestartet. Nach dem Wechsel zum Zweig dev-branch wird der Inhalt der Datei .git / HEAD zu refs / Heads / dev-branch.

2.6 Hooks-Verzeichnis

Im Verzeichnis sind viele Hook-Dateien (einige Skripte) gespeichert. Diese Dateien sind benutzerdefinierte Skripte, die von verschiedenen Git-Befehlen verwendet werden und vor und nach dem Vorgang in bestimmten Phasen von Git automatisch ausgeführt werden können, z. Einige Beispiel-Hooks werden installiert, wenn Sie git init ausführen, aber alle sind standardmäßig deaktiviert. Wenn Sie es aktivieren möchten, müssen Sie das Suffix .sample der Datei löschen.

2.7 Indexdatei

Temporärer Speicherbereich (Bühne), Binärdatei.

2.8 Info-Verzeichnis

Andere Informationen des Repositorys werden in diesem Verzeichnis aufgezeichnet.

info / exclude:  Ignoriert Dateien im angegebenen Modus, ähnlich wie .gitignore, aber .gitignore ist für jedes Verzeichnis spezifisch.

2.9 Protokollverzeichnis

Speichern Sie alle aktualisierten Referenzdatensätze. Die Verzeichnisstruktur ist wie folgt:

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

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

Unter diesen zeichnet HEAD alle Änderungsdatensätze auf, einschließlich des Wechsels von Zweigen, und speichert die Änderungsdatensätze von lokalen und entfernten Zweigen unter Protokollen / Refs. 

2.10 Objektverzeichnis

Git ist ein inhaltsadressierbares Dateisystem. Der Kern von Git ist ein einfacher Schlüsselwert-Datenspeicher. Sie können jede Art von Inhalt in das Git-Repository einfügen und es wird ein eindeutiger Schlüssel zurückgegeben, über den der Inhalt jederzeit wieder abgerufen werden kann.

Das einfache Verständnis lautet: Das Objektverzeichnis ist eine Git-Datenbank (eine Schlüssel-Wert-Paar-Datenbank, die in Form von map [key] = value vorstellbar ist). Auf den Inhalt wird gemäß dem Schlüssel zugegriffen, und der Schlüssel ist der Wert berechnet von SHA1. In diesem Verzeichnis sind (höchstens) drei Arten von Objekten gespeichert: Datenobjekte (Blob-Objekte), Baumobjekte (Baumobjekte) und Festschreibungsobjekte (Festschreibungsobjekte).

(1) Info- und Packverzeichnisse

Wenn die gespeicherte Datei sehr groß ist, komprimiert git sie und speichert sie unter info and pack.

(2) Verzeichnis mit 2 Zeichenbefehlen

Erstens sind diese beiden Buchstaben die ersten beiden Zeichen des berechneten SHA1-Werts (insgesamt 40 Zeichen), und die verbleibenden 38 sind die Dateinamen im Verzeichnis.

2.11 refs Verzeichnis

(1) Kopfverzeichnis

Das Verzeichnis enthält Dateien, die nach jedem lokalen Zweigstellennamen benannt sind , und speichert die zuletzt übermittelte ID des entsprechenden Zweigs, eine vom SHA1-Algorithmus berechnete Zeichenfolge.

(2) Fernbedienungsverzeichnis

Das Verzeichnis enthält Dateien, die nach jedem Namen des Remote-Zweigs benannt sind , speichert die ID der letzten Übermittlung des entsprechenden Zweigs und das Prinzip des Heads-Verzeichnisses.

(3) Tags-Verzeichnis

Speichern Sie die während des Entwicklungsprozesses erstellten Tags, die darin enthaltenen Dateien werden durch den Tag-Namen gesteuert, und der Inhalt der Datei ist die entsprechende ID.

3. Referenzen

[1]  Was ist Gits Beschreibungsdatei?

[2]  Gitignore

[3]  Git-Zweige

[4]  Gitrepository-Layout

 

 

 

 

Ich denke du magst

Origin blog.csdn.net/u011074149/article/details/109406589
Empfohlen
Rangfolge