@@ -7,27 +7,72 @@ Git-Glossar
77
88.. glossary ::
99
10+ Blob
11+ Ein Blob-Objekt enthält den Inhalt einer Datei.
12+
13+ Bei jedem Commit speichert Git den gesamten Inhalt jeder Datei, den ihr
14+ geändert habt, als Blob. Wenn ihr beispielsweise einen Commit habt, der
15+ zwei Dateien in einem Repository ändert, erstellt dieser Commit zwei
16+ neue Blobs, sodass Commits selbst in sehr großen Repositories relativ
17+ wenig Speicherplatz beanspruchen.
18+
1019 Branch
1120 Zweig
12- Ein Zweig ist eine Entwicklungslinie. Der letzte Commit auf einem Zweig
13- wird als Spitze des Zweiges bezeichnet, der durch einen ``head ``
14- referenziert wird und der sich weiterbewegt, wenn weitere Entwicklungen
15- auf dem Zweig vorgenommen werden. Ein einzelnes Git-Repository kann eine
16- beliebige Anzahl von Zweigen haben, aber ihr :term: `Working Tree ` ist
17- nur mit einem von ihnen verbunden – dem *aktuellen * oder
18- *ausgecheckten * Zweig – und :term: `HEAD ` zeigt auf diesen Zweig.
21+ Ein Zweig ist eine Entwicklungslinie. Der letzte :term: `Commit ` auf
22+ einem Zweig wird als Spitze des Zweiges bezeichnet, der durch einen
23+ :term: `HEAD ` referenziert wird und der sich weiterbewegt, wenn weitere
24+ Entwicklungen auf dem Zweig vorgenommen werden. Ein einzelnes
25+ Git-Repository kann eine beliebige Anzahl von Zweigen haben, aber ihr
26+ :term: `Working Tree ` ist nur mit einem von ihnen verbunden – dem
27+ *aktuellen * oder *ausgecheckten * Zweig – und :term: `HEAD ` zeigt auf
28+ diesen Zweig.
1929
2030 Cache
2131 Veraltet für :term: `Index `.
2232
2333 Clone
2434 Klon
25- Lokale Version eines Repository einschließlich aller Commits und
26- Branches.
35+ Lokale Version eines Repository einschließlich aller :term: ` Commits
36+ <Commit> ` und :term: ` Branches <Branch> ` .
2737
2838 Commit
29- Ein Snapshot des gesamten Git-Repository, komprimiert in einem `SHA
30- <https://de.wikipedia.org/wiki/Secure_Hash_Algorithm> `_.
39+ Ein Commit ist ein Snapshot des gesamten Git-Repository, der durch einen
40+ `SHA <https://de.wikipedia.org/wiki/Secure_Hash_Algorithm >`_-Wert
41+ eindeutig identifiziert werden kann und mindestens die folgenden
42+ Angaben enthält:
43+
44+ * Verzeichnisstruktur aller Dateien dieser Version des Repositorys und
45+ Inhalt jeder Datei, gespeichert als :term: `Tree `-ID des obersten
46+ Verzeichnisses des Commits.
47+ * ID(s) des oder der übergeordneten Commits. Der erste Commit eines
48+ Repository hat keine übergeordneten Commits, reguläre Commits haben
49+ einen übergeordneten Commit, Merge-Commits haben zwei oder mehr
50+ übergeordnete Commits.
51+ * Autor und Zeitpunkt, zu dem der Commit erstellt wurde.
52+ * Committer und Zeitpunkt, zu dem der Commit committet wurde.
53+ * Commit-Nachricht
54+
55+ Beispiel:
56+
57+ .. code-block :: console
58+
59+ $ git cat-file -p main
60+ tree 47cc0283b10bd5e4e8a0d61537d13bba3bfad916
61+ parent 63825a43e213ef8a7904a8994976ac86284d32bd
62+ author veit <veit@cusy.io> 1770370977 +0100
63+ committer veit <veit@cusy.io> 1770370977 +0100
64+
65+ :memo: Add links to Python speed
66+
67+ Wie alle anderen Objekte können auch Commits nach ihrer Erstellung nicht
68+ mehr geändert werden. Wenn ihr also einen Commit mit ``git commit
69+ --amend `` ändern wollt, wird tatsächlich ein neuer Commit mit demselben
70+ Parent erstellt. Und auch wenn ihr euch einen Commit mit ``git show ``
71+ anzeigen lasst, so wird das Diff zu diesem Zeitpunkt erst berechnet.
72+
73+ .. seealso ::
74+ * `Commits are snapshots, not diffs
75+ <https://github.blog/open-source/git/commits-are-snapshots-not-diffs/> `_
3176
3277 Fork
3378 Kopie eines Repository auf :term: `GitHub ` oder :term: `GitLab `, das einem
@@ -56,21 +101,61 @@ Git-Glossar
56101
57102 ``HEAD ``
58103 Der ``HEAD ``-Zeiger repräsentiert euer aktuelles Arbeitsverzeichnis und
59- kann mit ``git switch `` in verschiedene Zweige, Tags oder Commits
60- verschoben werden.
104+ kann mit ``git switch `` in verschiedene :term: ` Zweige <Zweig> `,
105+ :doc: ` Tags < tag >` oder :term: ` Commits <Commit> ` verschoben werden.
61106
62107 Index
63- Eine Sammlung von Dateien mit Statusinformationen, deren Inhalt als
64- Objekte gespeichert wird. Der Index ist eine gespeicherte Version eures
65- :term: `Working Tree `.
108+ Staging Area
109+
110+ .. _start-index
111+
112+ Liste von Dateien und deren Inhalten, die als :term: `Blob ` gespeichert
113+ sind. Mit ``git add `` könnt ihr Dateien zum Index hinzufügen oder den
114+ Inhalt einer Datei im Index aktualisieren.
115+
116+ Im Gegensatz zu einem :term: `Tree ` ist der Index eine flache Liste von
117+ Dateien. Wenn ihr committet, konvertiert Git die Liste der Dateien im
118+ Index in einen Verzeichnisbaum und verwendet diesen Baum für den neuen
119+ Commit. Jeder Indexeintrag hat vier Felder:
120+
121+ #. Einer der folgenden vier Dateitypen:
122+
123+ * reguläre Datei
124+ * ausführbare Datei
125+ * symbolischer Link
126+ * gitlink (für Submodule)
127+
128+ #. Blob-ID der Datei oder Commit-ID des Submoduls
129+ #. Staging-Nummer, normalerweise ``0 ``. Bei einen Merge-Konflikt kann es
130+ jedoch auch mehrere Versionen desselben Dateinamens im Index geben.
131+ #. Dateipfad
132+
133+ .. _end-index
66134
67135 Merge-Request
68136 Ort zum Vergleichen und Diskutieren der in einem Branch eingeführten
69137 Änderungen mit Bewertungen, Kommentaren, Tests :abbr: `etc. ( et cetera ) `;
70138
71139 .. seealso ::
72- * :doc: `advanced/gitlab/merge-requests `.
73- * :ref: `Merge- oder Pull-Requests <merge-pull-requests >`.
140+ * :doc: `advanced/gitlab/merge-requests `
141+ * :ref: `Merge- oder Pull-Requests <merge-pull-requests >`
142+
143+ Objekt
144+
145+ .. _start-object
146+
147+ Alle :term: `Commits <Commit> ` und Dateien in einem Git-Repository werden
148+ als Git-Objekte gespeichert, die sich nach ihrer Erstellung nie mehr
149+ ändern und eine eindeutige ID haben, :abbr: `z. B. ( zum Beispiel ) `
150+ ``3a5c279ea2f5d18498b61c229571d2449305a0 ``. :abbr: `D. h. ( Das heißt ) `,
151+ dass ihr mit der ID eines Objekts jederzeit dessen Inhalt
152+ wiederherstellen könnt, solange das Objekt nicht gelöscht wurde.
153+
154+ .. seealso ::
155+ * `Git Internals - Git Objects
156+ <https://git-scm.com/book/en/v2/Git-Internals-Git-Objects> `_
157+
158+ .. _end-object
74159
75160 ``origin ``
76161 Das übliche Upstream-Repository. Die meisten Projekte haben mindestens
@@ -79,10 +164,150 @@ Git-Glossar
79164 Zweige mit dem Namen :samp: `origin/{ NAME_OF_UPSTREAM_BRANCH } ` geholt,
80165 die ihr mit ``git branch -r `` sehen könnt.
81166
167+ Referenz
168+
169+ .. _start-refs
170+
171+ Referenzen sind eine Möglichkeit, Commits einen Namen zu geben, der
172+ einfacher, zu merken ist. Git verwendet häufig ``ref `` als Abkürzung für
173+ solche Referenzen. Die wichtigsten Referenzen sind:
174+
175+ :samp: `.git/refs/heads/{ BRANCHNAME } `
176+ Ein Branch bezieht sich auf die ID des neuesten Commits auf diesem
177+ Branch. Um die Historie der :term: `Commits <Commit> ` auf einem
178+ :term: `Branch ` abzurufen, beginnt Git bei der Commit-ID, auf die der
179+ Branch verweist, und sieht sich dann die übergeordneten Commits an.
180+ Referenzen können sich beziehen auf
181+
182+ * eine Objekt-ID, in der Regel eine Commit-ID
183+ * eine andere, *symbolische * Referenz
184+
185+ :samp: `.git/refs/tags/<{ TAGNAME } `
186+ Ein Tag bezieht sich auf eine Commit-ID, eine Tag-Objekt-ID oder
187+ eine andere Objekt-ID.
188+
189+ ``.git/HEAD ``
190+ ``HEAD `` ist der Ort, an dem Git euren aktuellen :term: `Branch `
191+ speichert. HEAD kann entweder
192+
193+ * eine symbolische Referenz auf euren aktuellen Branch sein,
194+ :abbr: `z.B. ( zum Beispiel ) ` ``ref: refs/heads/main ``.
195+ * eine direkte Referenz auf eine Commit-ID wenn es keinen aktuellen
196+ Branch gibt, also in einem *detached HEAD state *.
197+
198+ :samp: `.git/refs/remotes/{ REMOTE } /{ BRANCHNAME } `
199+ Ein Remote-Tracking-Branch bezieht sich auf eine Commit-ID. Mit
200+ ``git fetch `` könnt ihr diese :abbr: `ggf. ( gegebenenfalls ) `
201+ aktualisieren und wenn ``git status `` ``Your branch is up to date
202+ with 'origin/main' `` ausgibt, bezieht es sich darauf.
203+
204+ ``refs/remotes/{REMOTE}/HEAD `` ist eine symbolische Referenz auf den
205+ Standard-Zweig des Remote-Repositories.
206+
207+ .. seealso ::
208+ * `Git Internals - Git References
209+ <https://git-scm.com/book/en/v2/Git-Internals-Git-References> `_
210+
211+ .. _end-refs :
212+
213+ Reflog
214+
215+ .. _start-reflog
216+
217+ Jedes Mal, wenn ein :term: `Branch `, ein Remote-Tracking-Branch oder HEAD
218+ aktualisiert wird, aktualisiert Git ein Protokoll namens *Reflog * für
219+ diese Referenz. Jeder Eintrag des Reflog enthält:
220+
221+ * Commit-ID
222+ * Zeitstempel, zu dem die Änderung vorgenommen wurde
223+ * Protokollmeldung, :abbr: `z. B. ( zum Beispiel ) ` ``commit `` oder
224+ ``reset ``
225+
226+ Reflogs protokollieren nur Änderungen, die in eurem lokalen Repository
227+ vorgenommen wurden. Sie werden jedoch nicht im :term: `Remote Repository `
228+ geteilt.
229+
230+ Ihr könnt euch ein Reflog mit :samp: `git reflog { REFERENZ } ` anzeigen
231+ lassen, :abbr: `z. B. ( zum Beispiel ) `:
232+
233+ .. code-block :: console
234+
235+ $ git reflog
236+ 133d35a (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: :memo: Add links to Python speed
237+ 63825a4 HEAD@{1}: reset: moving to @~
238+ ...
239+
240+ .. seealso ::
241+ * `Git Internals - The Refspec
242+ <https://git-scm.com/book/en/v2/Git-Internals-The-Refspec> `_
243+
244+ .. _end-reflog
245+
82246 Remote Repository
83247 Gemeinsames Repository, :abbr: `z.B. ( zum Beispiel ) ` auf :term: `GitLab `,
84248 zum Austausch von Änderungen in einem Team.
85249
250+ Tag-Objekt
251+ Tag-Objekte enthalten mindestens die folgenden Felder:
252+
253+ * ID des Objekts, auf das es verweist
254+ * Typ des Objekts, auf das es verweist
255+ * Tag-Nachricht
256+ * Tagger und Tag-Datum
257+
258+ Beispiel:
259+
260+ .. code-block :: console
261+
262+ $ git cat-file -p 24.3.0
263+ object aa366cc9af3497544338482f82bdeb21f1dd3c21
264+ type commit
265+ tag 24.3.0
266+ tagger Veit Schiele <veit@cusy.io> 1732086922 +0100
267+
268+ Tree
269+ Darstellung eines Verzeichnisses in Git und kann Dateien oder andere
270+ Bäume (also Unterverzeichnisse) enthalten. Für jedes Element im Baum
271+ listet er Folgendes auf:
272+
273+ * Dateiname
274+ * Dateityp:
275+
276+ * normale Datei
277+ * ausführbare Datei
278+ * symbolischer Link
279+ * Verzeichnis
280+ * gitlink (für Submodule)
281+
282+ * Objekt-ID mit dem Inhalt der Datei, des Verzeichnisses oder des
283+ gitlinks
284+
285+ Beispiel:
286+
287+ .. code-block :: console
288+
289+ $ git cat-file -p main^{tree}
290+ 040000 tree 2f59a223f7dc767f4776e77762d208fa72bfd343 .dvc
291+ 040000 tree 75833fd33271db55b6f1c96915f60f98a60b51a0 .github
292+ 100644 blob 36d2dc5a5228cbf65b8cfe913565c9be49db1a3d .gitignore
293+ ...
294+ $ git cat-file -p 2f59a223f7dc767f4776e77762d208fa72bfd343
295+ 100644 blob 669784da1fe0818e9abb795f73b7faf393832f2e .gitignore
296+ 100644 blob 0a66f9a9ab72e3a99994803de8337f523b1b93d0 config
297+ $ git cat-file -p 36d2dc5a5228cbf65b8cfe913565c9be49db1a3d
298+ # SPDX-FileCopyrightText: 2019 Veit Schiele
299+ #
300+ # SPDX-License-Identifier: BSD-3-Clause
301+ ...
302+
303+ .. hint ::
304+ Die erste Spalte eines Baum-Eintrags orientiert sich grob an den
305+ `Unix-Dateirechten
306+ <https://de.wikipedia.org/wiki/Unix-Dateirechte> `_, tatsächlich
307+ können mit Git jedoch Unix-Dateirechte verwaltet werden. Hierzu sind
308+ Erweiterungen, wie :abbr: `z.B. ( zum Beispiel ) `
309+ :doc: `advanced/etckeeper ` erforderlich.
310+
86311 Trunk-Based Development
87312 TBD
88313 Git-Workflow mit kurzlebigen Themenzweigen, die schnell zum einem
0 commit comments