Updated credits.
[gitmagic/gitmagic.git] / de / pot / secrets.po
blob7dd46fd3b8e23261c8dc874a5eb0c14a3df38b79
1 # Git Magic - A guide to using Git
2 # This file is distributed under the GNU GENERAL PUBLIC LICENSE Version 3.
3 # Benn Lynn <benlynn@gmail.com>, 2007.
4 # Armin Stebich <armin@lordofbikes.de>, 2010, 2011.
6 msgid ""
7 msgstr ""
8 "Project-Id-Version: Git Magic deutsch\n"
9 "Report-Msgid-Bugs-To: bennlynn@gmail.com\n"
10 "POT-Creation-Date: 2010-10-30 08:21+0300\n"
11 "PO-Revision-Date: 2011-07-07 18:53+0200\n"
12 "Last-Translator: Armin Stebich <armin@lordofbikes.de>\n"
13 "Language-Team: DE <gitmagic@lordofbikes.de>\n"
14 "Language: de\n"
15 "MIME-Version: 1.0\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: UTF-8\n"
18 "Plural-Forms: \n"
20 #. type: Plain text
21 #: ../en/secrets.txt:2
22 msgid "== Secrets Revealed =="
23 msgstr "== Aufgedeckte Geheimnisse =="
25 #. type: Plain text
26 #: ../en/secrets.txt:4
27 msgid ""
28 "We take a peek under the hood and explain how Git performs its miracles. I "
29 "will skimp over details. For in-depth descriptions refer to http://www."
30 "kernel.org/pub/software/scm/git/docs/user-manual.html[the user manual]."
31 msgstr ""
32 "Wir werfen einen Blick unter die Motorhaube und erklären, wie Git seine "
33 "Wunder vollbringt. Ich werde nicht ins Detail gehen. Für tiefer gehende "
34 "Erklärungen verweise ich auf das http://www.kernel.org/pub/software/scm/git/"
35 "docs/user-manual.html[englischsprachige Benutzerhandbuch]."
37 #. type: Plain text
38 #: ../en/secrets.txt:6
39 msgid "=== Invisibility ==="
40 msgstr "=== Unsichtbarkeit ==="
42 #. type: Plain text
43 #: ../en/secrets.txt:8
44 msgid ""
45 "How can Git be so unobtrusive? Aside from occasional commits and merges, you "
46 "can work as if you were unaware that version control exists. That is, until "
47 "you need it, and that's when you're glad Git was watching over you the whole "
48 "time."
49 msgstr ""
50 "Wie kann Git so unauffällig sein? Abgesehen von gelegentlichen 'Commits' und "
51 "'Merges' kannst Du arbeiten, als würde die Versionsverwaltung nicht "
52 "existieren. Das heißt, bis Du sie brauchst. Und das ist, wenn Du froh bist, "
53 "dass Git die ganze Zeit über Dich gewacht hat."
55 #. type: Plain text
56 #: ../en/secrets.txt:10
57 msgid ""
58 "Other version control systems force you to constantly struggle with red tape "
59 "and bureaucracy. Permissions of files may be read-only unless you explicitly "
60 "tell a central server which files you intend to edit. The most basic "
61 "commands may slow to a crawl as the number of users increases. Work grinds "
62 "to a halt when the network or the central server goes down."
63 msgstr ""
64 "Andere Versionsverwaltungssysteme zwingen Dich ständig Dich mit "
65 "Verwaltungskram und Bürokratie herumzuschlagen. Dateien sind können "
66 "schreibgeschützt sein, bis Du einem zentralen Server mitteilst, welche "
67 "Dateien Du gerne bearbeiten möchtest. Die einfachsten Befehle werden bis zum "
68 "Schneckentempo verlangsamt, wenn die Anzahl der Anwender steigt. Deine "
69 "Arbeit kommt zum Stillstand, wenn das Netzwerk oder der zentrale Server weg "
70 "sind."
72 #. type: Plain text
73 #: ../en/secrets.txt:12
74 msgid ""
75 "In contrast, Git simply keeps the history of your project in the `.git` "
76 "directory in your working directory. This is your own copy of the history, "
77 "so you can stay offline until you want to communicate with others. You have "
78 "total control over the fate of your files because Git can easily recreate a "
79 "saved state from `.git` at any time."
80 msgstr ""
81 "Im Gegensatz dazu hält Git seinen Verlauf einfach im `.git` Verzeichnis von "
82 "Deinem Arbeitsverzeichnis. Das ist Deine eigene Kopie der "
83 "Versionsgeschichte, damit kannst Du so lange offline bleiben, bis Du mit "
84 "anderen kommunizieren willst. Du hast die absolute Kontrolle über das "
85 "Schicksal Deiner Dateien, denn Git kann jederzeit einfach einen gesicherten "
86 "Stand aus `.git` wiederherstellen."
88 #. type: Plain text
89 #: ../en/secrets.txt:14
90 msgid "=== Integrity ==="
91 msgstr "=== Integrität ==="
93 #. type: Plain text
94 #: ../en/secrets.txt:16
95 msgid ""
96 "Most people associate cryptography with keeping information secret, but "
97 "another equally important goal is keeping information safe. Proper use of "
98 "cryptographic hash functions can prevent accidental or malicious data "
99 "corruption."
100 msgstr ""
101 "Die meisten Leute verbinden mit Kryptographie die Geheimhaltung von "
102 "Informationen, aber ein genau so wichtiges Ziel ist es Informationen zu "
103 "sichern. Die richtige Anwendung von kryptographischen Hash-Funktionen kann "
104 "einen versehentlichen oder bösartigen Datenverlust verhindern."
106 #. type: Plain text
107 #: ../en/secrets.txt:18
108 msgid ""
109 "A SHA1 hash can be thought of as a unique 160-bit ID number for every string "
110 "of bytes you'll encounter in your life. Actually more than that: every "
111 "string of bytes that any human will ever use over many lifetimes."
112 msgstr ""
113 "Einen SHA1-Hash-Wert kann man sich als eindeutige 160-Bit Identitätsnummer "
114 "für jegliche Zeichenkette vorstellen, welche Dir in Deinem ganzen Leben "
115 "begegnen wird. Sogar mehr als das: jegliche Zeichenfolge, die alle Menschen "
116 "über mehrere Generationen verwenden."
118 #. type: Plain text
119 #: ../en/secrets.txt:20
120 msgid ""
121 "As a SHA1 hash is itself a string of bytes, we can hash strings of bytes "
122 "containing other hashes. This simple observation is surprisingly useful: "
123 "look up 'hash chains'. We'll later see how Git uses it to efficiently "
124 "guarantee data integrity."
125 msgstr ""
126 "Ein SHA1-Hash-Wert selbst ist eine Zeichenfolge von Bytes. Wir können SHA1-"
127 "Hash-Werte aus Zeichenfolgen generieren, die selbst SHA1-Hash-Werte "
128 "enthalten. Diese einfache Beobachtung ist überraschend nützlich: suche nach "
129 "'hash chains'. Wir werden später sehen, wie Git diese nutzt um effizient die "
130 "Datenintegrität zu garantieren."
132 #. type: Plain text
133 #: ../en/secrets.txt:22
134 msgid ""
135 "Briefly, Git keeps your data in the `.git/objects` subdirectory, where "
136 "instead of normal filenames, you'll find only IDs. By using IDs as "
137 "filenames, as well as a few lockfiles and timestamping tricks, Git "
138 "transforms any humble filesystem into an efficient and robust database."
139 msgstr ""
140 "Kurz gesagt, Git hält Deine Daten in dem `.git/objects` Unterverzeichnis, wo "
141 "Du anstelle von normalen Dateinamen nur Identitätsnummern findest. Durch die "
142 "Verwendung von Identitätsnummern als Dateiname, zusammen mit ein paar "
143 "Sperrdateien und Zeitstempeltricks, macht Git aus einem einfachen "
144 "Dateisystem eine effiziente und robuste Datenbank."
146 #. type: Plain text
147 #: ../en/secrets.txt:24
148 msgid "=== Intelligence ==="
149 msgstr "=== Intelligenz ==="
151 #. type: Plain text
152 #: ../en/secrets.txt:26
153 msgid ""
154 "How does Git know you renamed a file, even though you never mentioned the "
155 "fact explicitly? Sure, you may have run *git mv*, but that is exactly the "
156 "same as a *git rm* followed by a *git add*."
157 msgstr ""
158 "Woher weiß Git, dass Du eine Datei umbenannt hast, obwohl Du es ihm niemals "
159 "explizit mitgeteilt hast? Sicher, Du hast vielleicht *git mv* benutzt, aber "
160 "das ist exakt das selbe wie *git rm* gefolgt von *git add*."
162 #. type: Plain text
163 #: ../en/secrets.txt:28
164 msgid ""
165 "Git heuristically ferrets out renames and copies between successive "
166 "versions. In fact, it can detect chunks of code being moved or copied around "
167 "between files! Though it cannot cover all cases, it does a decent job, and "
168 "this feature is always improving. If it fails to work for you, try options "
169 "enabling more expensive copy detection, and consider upgrading."
170 msgstr ""
171 "Git stöbert Umbenennungen und Kopien zwischen aufeinander folgenden "
172 "Versionen heuristisch auf. Vielmehr kann es sogar Codeblöcke erkennen, die "
173 "zwischen Dateien hin und her kopiert oder verschoben wurden! Jedoch kann es "
174 "nicht alle Fälle abdecken, aber es leistet ordentliche Arbeit und diese "
175 "Eigenschaft wird immer besser. Wenn es bei Dir nicht funktioniert, versuche "
176 "Optionen zur aufwendigeren Erkennung von Kopien oder erwäge einen Upgrade."
178 #. type: Plain text
179 #: ../en/secrets.txt:30
180 msgid "=== Indexing ==="
181 msgstr "=== Indizierung ==="
183 #. type: Plain text
184 #: ../en/secrets.txt:32
185 msgid ""
186 "For every tracked file, Git records information such as its size, creation "
187 "time and last modification time in a file known as the 'index'. To determine "
188 "whether a file has changed, Git compares its current stats with those cached "
189 "in the index. If they match, then Git can skip reading the file again."
190 msgstr ""
191 "Für jede überwachte Datei speichert Git Informationen wie deren Größe, ihren "
192 "Erstellzeitpunkt und den Zeitpunkt der letzten Bearbeitung in einer Datei "
193 "die wir als 'Index' kennen. Um zu ermitteln, ob eine Datei verändert wurde, "
194 "vergleicht Git den aktuellen Status mit dem im Index gespeicherten. Stimmen "
195 "diese Daten überein, kann Git das Lesen des Dateiinhalts überspringen."
197 #. type: Plain text
198 #: ../en/secrets.txt:35
199 msgid ""
200 "Since stat calls are considerably faster than file reads, if you only edit a "
201 "few files, Git can update its state in almost no time."
202 msgstr ""
203 "Da das Abfragen des Dateistatus erheblich schneller ist als das Lesen der "
204 "Datei, kann Git, wenn Du nur ein paar Dateien verändert hast, seinen Status "
205 "im Nu aktualisieren."
207 #. type: Plain text
208 #: ../en/secrets.txt:40
209 msgid ""
210 "We stated earlier that the index is a staging area. Why is a bunch of file "
211 "stats a staging area? Because the add command puts files into Git's database "
212 "and updates these stats, while the commit command, without options, creates "
213 "a commit based only on these stats and the files already in the database."
214 msgstr ""
215 "Wir haben früher festgestellt, dass der Index ein Bereitstellungsraum ist. "
216 "Warum kann ein Haufen von Dateistatusinformationen ein Bereitstellungsraum "
217 "sein? Weil die 'add' Anweisung Dateien in die Git Datenbank befördert und "
218 "die Dateistatusinformationen aktualisiert, während die 'commit' Anweisung, "
219 "ohne Optionen, einen 'Commit' nur auf Basis der Dateistatusinformationen "
220 "erzeugt, weil die Dateien ja schon in der Datenbank sind."
222 #. type: Plain text
223 #: ../en/secrets.txt:42
224 msgid "=== Git's Origins ==="
225 msgstr "=== Git's Wurzeln ==="
227 #. type: Plain text
228 #: ../en/secrets.txt:44
229 msgid ""
230 "This http://lkml.org/lkml/2005/4/6/121[Linux Kernel Mailing List post] "
231 "describes the chain of events that led to Git. The entire thread is a "
232 "fascinating archaeological site for Git historians."
233 msgstr ""
234 "Dieser http://lkml.org/lkml/2005/4/6/121['Linux Kernel Mailing List' "
235 "Beitrag] beschreibt die Kette von Ereignissen, die zu Git geführt haben. Der "
236 "ganze Beitrag ist eine faszinierende archäologische Seite für Git Historiker."
238 #. type: Plain text
239 #: ../en/secrets.txt:46
240 msgid "=== The Object Database ==="
241 msgstr "=== Die Objektdatenbank ==="
243 #. type: Plain text
244 #: ../en/secrets.txt:52
245 msgid ""
246 "Every version of your data is kept in the 'object database', which lives in "
247 "the subdirectory `.git/objects`; the other residents of `.git/` hold lesser "
248 "data: the index, branch names, tags, configuration options, logs, the "
249 "current location of the head commit, and so on. The object database is "
250 "elementary yet elegant, and the source of Git's power."
251 msgstr ""
252 "Jegliche Version Deiner Daten wird in der Objektdatenbank gehalten, welche "
253 "im Unterverzeichnis `.git/objects` liegt; Die anderen Orte in `.git/` "
254 "enthalten weniger wichtige Daten: den Index, 'Branch' Namen, Bezeichner "
255 "('tags'), Konfigurationsoptionen, Logdateien, die Position des aktuellen "
256 "'HEAD Commit' und so weiter. Die Objektdatenbank ist einfach aber trotzdem "
257 "elegant und sie ist die Quelle von Git's Macht."
259 #. type: Plain text
260 #: ../en/secrets.txt:55
261 msgid ""
262 "Each file within `.git/objects` is an 'object'. There are 3 kinds of objects "
263 "that concern us: 'blob' objects, 'tree' objects, and 'commit' objects."
264 msgstr ""
265 "Jede Datei in `.git/objects` ist ein 'Objekt'. Es gibt drei Arten von "
266 "Objekten die uns betreffen: 'Blob'-, 'Tree'-, und 'Commit'-Objekte."
268 #. type: Plain text
269 #: ../en/secrets.txt:57
270 msgid "=== Blobs ==="
271 msgstr "=== Blobs ==="
273 #. type: Plain text
274 #: ../en/secrets.txt:59
275 msgid ""
276 "First, a magic trick. Pick a filename, any filename. In an empty directory:"
277 msgstr ""
278 "Zuerst ein Zaubertrick. Suche Dir einen Dateinamen aus, irgendeinen. In "
279 "einem leeren Verzeichnis:"
281 #. type: Plain text
282 #: ../en/secrets.txt:64
283 #, no-wrap
284 msgid ""
285 " $ echo sweet > YOUR_FILENAME\n"
286 " $ git init\n"
287 " $ git add .\n"
288 " $ find .git/objects -type f\n"
289 msgstr ""
290 " $ echo sweet > DEIN_DATEINAME\n"
291 " $ git init\n"
292 " $ git add .\n"
293 " $ find .git/objects -type f\n"
295 #. type: Plain text
296 #: ../en/secrets.txt:66
297 msgid "You'll see +.git/objects/aa/823728ea7d592acc69b36875a482cdf3fd5c8d+."
298 msgstr ""
299 "Du wirst folgendes sehen: +.git/objects/"
300 "aa/823728ea7d592acc69b36875a482cdf3fd5c8d+."
302 #. type: Plain text
303 #: ../en/secrets.txt:69
304 msgid ""
305 "How do I know this without knowing the filename? It's because the SHA1 hash "
306 "of:"
307 msgstr ""
308 "Wie konnte ich das wissen, ohne den Dateiname zu kennen? Weil der SHA1-Hash-"
309 "Wert von:"
311 #. type: Plain text
312 #: ../en/secrets.txt:71
313 #, no-wrap
314 msgid " \"blob\" SP \"6\" NUL \"sweet\" LF\n"
315 msgstr " \"blob\" SP \"6\" NUL \"sweet\" LF\n"
317 #. type: Plain text
318 #: ../en/secrets.txt:75
319 msgid ""
320 "is aa823728ea7d592acc69b36875a482cdf3fd5c8d, where SP is a space, NUL is a "
321 "zero byte and LF is a linefeed. You can verify this by typing:"
322 msgstr ""
323 "aa823728ea7d592acc69b36875a482cdf3fd5c8d ist. Wobei SP ein Leerzeichen ist, "
324 "NUL ist ein Nullbyte und LF ist ein Zeilenumbruch. Das kannst Du "
325 "kontrollieren, durch die Eingabe von:"
327 #. type: Plain text
328 #: ../en/secrets.txt:77
329 #, no-wrap
330 msgid "  $ printf \"blob 6\\000sweet\\n\" | sha1sum\n"
331 msgstr "  $ printf \"blob 6\\000sweet\\n\" | sha1sum\n"
333 #. type: Plain text
334 #: ../en/secrets.txt:84
335 msgid ""
336 "Git is 'content-addressable': files are not stored according to their "
337 "filename, but rather by the hash of the data they contain, in a file we call "
338 "a 'blob object'. We can think of the hash as a unique ID for a file's "
339 "contents, so in a sense we are addressing files by their content. The "
340 "initial `blob 6` is merely a header consisting of the object type and its "
341 "length in bytes; it simplifies internal bookkeeping."
342 msgstr ""
343 "Git ist 'assoziativ': Dateien werden nicht nach Ihren Namen gespeichert, "
344 "sondern eher nach dem SHA1-Hash-Wert der Daten, welche sie enthalten, in "
345 "einer Datei, die wir als 'Blob'-Objekt bezeichnen. Wir können uns den SHA1-"
346 "Hash-Wert als eindeutige Identnummer des Dateiinhalts vorstellen, was "
347 "sinngemäß bedeutet, dass die Dateien über ihren Inhalt adressiert werden. "
348 "Das führende `blob 6` ist lediglich ein Vermerk, der sich aus dem Objekttyp "
349 "und seiner Länge in Bytes zusammensetzt; er vereinfacht die interne "
350 "Verwaltung."
352 #. type: Plain text
353 #: ../en/secrets.txt:87
354 msgid ""
355 "Thus I could easily predict what you would see. The file's name is "
356 "irrelevant: only the data inside is used to construct the blob object."
357 msgstr ""
358 "So konnte ich einfach vorhersagen, was Du sehen wirst. Der Dateiname ist "
359 "irrelevant: nur der Dateiinhalt wird zum Erstellen des 'Blob'-Objekt "
360 "verwendet."
362 #. type: Plain text
363 #: ../en/secrets.txt:91
364 msgid ""
365 "You may be wondering what happens to identical files. Try adding copies of "
366 "your file, with any filenames whatsoever. The contents of +.git/objects+ "
367 "stay the same no matter how many you add. Git only stores the data once."
368 msgstr ""
369 "Du wirst Dich fragen, was mit identischen Dateien ist. Versuche Kopien "
370 "Deiner Datei hinzuzufügen, mit beliebigen Dateinamen. Der Inhalt von +.git/"
371 "objects+ bleibt der selbe, ganz egal wieviele Dateien Du hinzufügst. Git "
372 "speichert den Dateiinhalt nur ein einziges Mal."
374 #. type: Plain text
375 #: ../en/secrets.txt:95
376 msgid ""
377 "By the way, the files within +.git/objects+ are compressed with zlib so you "
378 "should not stare at them directly. Filter them through http://www.zlib.net/"
379 "zpipe.c[zpipe -d], or type:"
380 msgstr ""
381 "Übrigens, die Dateien in +.git/objects+ sind mit zlib komprimiert, Du "
382 "solltest sie also nicht direkt anschauen. Filtere sie durch http://www.zlib."
383 "net/zpipe.c[zpipe -d], oder gib ein:"
385 #. type: Plain text
386 #: ../en/secrets.txt:97
387 #, no-wrap
388 msgid " $ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
389 msgstr " $ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
391 #. type: Plain text
392 #: ../en/secrets.txt:99
393 msgid "which pretty-prints the given object."
394 msgstr "was Dir das Objekt im Klartext anzeigt."
396 #. type: Plain text
397 #: ../en/secrets.txt:101
398 msgid "=== Trees ==="
399 msgstr "=== 'Trees' ==="
401 #. type: Plain text
402 #: ../en/secrets.txt:104
403 msgid ""
404 "But where are the filenames? They must be stored somewhere at some stage.  "
405 "Git gets around to the filenames during a commit:"
406 msgstr ""
407 "Aber wo sind die Dateinamen? Sie müssen irgendwo gespeichert sein. Git kommt "
408 "beim 'Commit' dazu sich um die Dateinamen zu kümmern:"
410 #. type: Plain text
411 #: ../en/secrets.txt:107
412 #, no-wrap
413 msgid ""
414 " $ git commit  # Type some message.\n"
415 " $ find .git/objects -type f\n"
416 msgstr ""
417 " $ git commit  # Schreibe eine Bemerkung.\n"
418 " $ find .git/objects -type f\n"
420 #. type: Plain text
421 #: ../en/secrets.txt:109
422 msgid ""
423 "You should now see 3 objects. This time I cannot tell you what the 2 new "
424 "files are, as it partly depends on the filename you picked. We'll proceed "
425 "assuming you chose ``rose''. If you didn't, you can rewrite history to make "
426 "it look like you did:"
427 msgstr ""
428 "Du solltest nun drei Objekte sehen. Dieses mal kann ich Dir nicht sagen, wie "
429 "die zwei neuen Dateien heißen, weil es zum Teil vom gewählten Dateiname "
430 "abhängt, den Du ausgesucht hast. Fahren wir fort mit der Annahme, Du hast "
431 "eine Datei ``rose'' genannt. Wenn nicht, kannst Du den Verlauf so "
432 "umschreiben, dass es so aussieht als hättest Du es:"
434 #. type: Plain text
435 #: ../en/secrets.txt:112
436 #, no-wrap
437 msgid ""
438 " $ git filter-branch --tree-filter 'mv YOUR_FILENAME rose'\n"
439 " $ find .git/objects -type f\n"
440 msgstr ""
441 " $ git filter-branch --tree-filter 'mv DEIN_DATEINAME rose'\n"
442 " $ find .git/objects -type f\n"
444 #. type: Plain text
445 #: ../en/secrets.txt:116
446 msgid ""
447 "Now you should see the file +.git/objects/05/"
448 "b217bb859794d08bb9e4f7f04cbda4b207fbe9+, because this is the SHA1 hash of "
449 "its contents:"
450 msgstr ""
451 "Nun müsstest Du die Datei +.git/objects/05/"
452 "b217bb859794d08bb9e4f7f04cbda4b207fbe9+ sehen, denn das ist der SHA1-Hash-"
453 "Wert ihres Inhalts:"
455 #. type: Plain text
456 #: ../en/secrets.txt:118
457 #, no-wrap
458 msgid " \"tree\" SP \"32\" NUL \"100644 rose\" NUL 0xaa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
459 msgstr " \"tree\" SP \"32\" NUL \"100644 rose\" NUL 0xaa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
461 #. type: Plain text
462 #: ../en/secrets.txt:120
463 msgid "Check this file does indeed contain the above by typing:"
464 msgstr ""
465 "Prüfe, ob diese Datei tatsächlich dem obigen Inhalt entspricht, durch "
466 "Eingabe von:"
468 #. type: Plain text
469 #: ../en/secrets.txt:122
470 #, no-wrap
471 msgid " $ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch\n"
472 msgstr " $ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch\n"
474 #. type: Plain text
475 #: ../en/secrets.txt:124
476 msgid "With zpipe, it's easy to verify the hash:"
477 msgstr "Mit zpipe, ist es einfach den SHA1-Hash-Wert zu prüfen:"
479 #. type: Plain text
480 #: ../en/secrets.txt:126
481 #, no-wrap
482 msgid " $ zpipe -d < .git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9 | sha1sum\n"
483 msgstr " $ zpipe -d < .git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9 | sha1sum\n"
485 #. type: Plain text
486 #: ../en/secrets.txt:129
487 msgid ""
488 "Hash verification is trickier via cat-file because its output contains more "
489 "than the raw uncompressed object file."
490 msgstr ""
491 "Die SHA1-Hash-Wert Prüfung mit 'cat-file' ist etwas kniffliger, da dessen "
492 "Ausgabe mehr als die rohe unkomprimierte Objektdatei enthält."
494 #. type: Plain text
495 #: ../en/secrets.txt:135
496 msgid ""
497 "This file is a 'tree' object: a list of tuples consisting of a file type, a "
498 "filename, and a hash. In our example, the file type is 100644, which means "
499 "`rose` is a normal file, and the hash is the blob object that contains the "
500 "contents of `rose'. Other possible file types are executables, symlinks or "
501 "directories. In the last case, the hash points to a tree object."
502 msgstr ""
503 "Diese Datei ist ein 'Tree'-Objekt: eine Liste von Datensätzen, bestehend aus "
504 "dem Dateityp, dem Dateinamen und einem SHA1-Hash-Wert. In unserem Beispiel "
505 "ist der Dateityp 100644, was bedeutet, dass `rose` eine normale Datei ist "
506 "und der SHA1-Hash-Wert entspricht dem 'Blob'-Objekt, welches den Inhalt von "
507 "`rose` enthält. Andere mögliche Dateitypen sind ausführbare Programmdateien, "
508 "symbolische Links oder Verzeichnisse. Im letzten Fall zeigt der SHA1-Hash-"
509 "Wert auf ein 'Tree'-Objekt."
511 #. type: Plain text
512 #: ../en/secrets.txt:139
513 msgid ""
514 "If you ran filter-branch, you'll have old objects you no longer need. "
515 "Although they will be jettisoned automatically once the grace period "
516 "expires, we'll delete them now to make our toy example easier to follow:"
517 msgstr ""
518 "Wenn Du 'filter-branch' aufrufst, bekommst Du alte Objekte, welche nicht "
519 "länger benötigt werden. Obwohl sie automatisch über Bord geworfen werden, "
520 "wenn ihre Gnadenfrist abgelaufen ist, wollen wir sie nun löschen, damit wir "
521 "unserem Beispiel besser folgen können."
523 #. type: Plain text
524 #: ../en/secrets.txt:143
525 #, no-wrap
526 msgid ""
527 " $ rm -r .git/refs/original\n"
528 " $ git reflog expire --expire=now --all\n"
529 " $ git prune\n"
530 msgstr ""
531 " $ rm -r .git/refs/original\n"
532 " $ git reflog expire --expire=now --all\n"
533 " $ git prune\n"
535 #. type: Plain text
536 #: ../en/secrets.txt:150
537 msgid ""
538 "For real projects you should typically avoid commands like this, as you are "
539 "destroying backups. If you want a clean repository, it is usually best to "
540 "make a fresh clone. Also, take care when directly manipulating +.git+: what "
541 "if a Git command is running at the same time, or a sudden power outage "
542 "occurs? In general, refs should be deleted with *git update-ref -d*, though "
543 "usually it's safe to remove +refs/original+ by hand."
544 msgstr ""
545 "Für reale Projekte solltest Du solche Anweisungen üblicherweise vermeiden, "
546 "da Du dadurch Datensicherungen zerstörst. Wenn Du ein sauberes 'Repository' "
547 "willst, ist es am besten, einen neuen Klon anzulegen. Sei auch vorsichtig, "
548 "wenn Du +.git+ direkt manipulierst: was, wenn zeitgleich ein Git Kommando "
549 "ausgeführt wird oder plötzlich der Strom ausfällt? Generell sollten "
550 "Referenzen mit *git update-ref -d* gelöscht werden, auch wenn es gewöhnlich "
551 "sicher ist +refs/original+ von Hand zu löschen."
553 #. type: Plain text
554 #: ../en/secrets.txt:152
555 msgid "=== Commits ==="
556 msgstr "=== 'Commits' ==="
558 #. type: Plain text
559 #: ../en/secrets.txt:156
560 msgid ""
561 "We've explained 2 of the 3 objects. The third is a 'commit' object. Its "
562 "contents depend on the commit message as well as the date and time it was "
563 "created. To match what we have here, we'll have to tweak it a little:"
564 msgstr ""
565 "Wir haben nun zwei von drei Objekten erklärt. Das dritte ist ein 'Commit'-"
566 "Objekt. Sein Inhalt hängt von der 'Commit'-Beschreibung ab, wie auch vom "
567 "Zeitpunkt der Erstellung. Damit alles zu unserem Beispiel passt, müssen wir "
568 "ein wenig tricksen:"
570 #. type: Plain text
571 #: ../en/secrets.txt:166
572 #, no-wrap
573 msgid ""
574 " $ git commit --amend -m Shakespeare  # Change the commit message.\n"
575 " $ git filter-branch --env-filter 'export\n"
576 "     GIT_AUTHOR_DATE=\"Fri 13 Feb 2009 15:31:30 -0800\"\n"
577 "     GIT_AUTHOR_NAME=\"Alice\"\n"
578 "     GIT_AUTHOR_EMAIL=\"alice@example.com\"\n"
579 "     GIT_COMMITTER_DATE=\"Fri, 13 Feb 2009 15:31:30 -0800\"\n"
580 "     GIT_COMMITTER_NAME=\"Bob\"\n"
581 "     GIT_COMMITTER_EMAIL=\"bob@example.com\"'  # Rig timestamps and authors.\n"
582 " $ find .git/objects -type f\n"
583 msgstr ""
584 " $ git commit --amend -m Shakespeare  # Ändere die Bemerkung.\n"
585 " $ git filter-branch --env-filter 'export\n"
586 "     GIT_AUTHOR_DATE=\"Fri 13 Feb 2009 15:31:30 -0800\"\n"
587 "     GIT_AUTHOR_NAME=\"Alice\"\n"
588 "     GIT_AUTHOR_EMAIL=\"alice@example.com\"\n"
589 "     GIT_COMMITTER_DATE=\"Fri, 13 Feb 2009 15:31:30 -0800\"\n"
590 "     GIT_COMMITTER_NAME=\"Bob\"\n"
591 "     GIT_COMMITTER_EMAIL=\"bob@example.com\"'  # Manipuliere Zeitstempel und Autor.\n"
592 " $ find .git/objects -type f\n"
594 #. type: Plain text
595 #: ../en/secrets.txt:170
596 msgid ""
597 "You should now see +.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187+ "
598 "which is the SHA1 hash of its contents:"
599 msgstr ""
600 "Du solltest nun +.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187+ "
601 "finden, was dem SHA1-Hash-Wert seines Inhalts entspricht:"
603 #. type: Plain text
604 #: ../en/secrets.txt:177
605 #, no-wrap
606 msgid ""
607 " \"commit 158\" NUL\n"
608 " \"tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9\" LF\n"
609 " \"author Alice <alice@example.com> 1234567890 -0800\" LF\n"
610 " \"committer Bob <bob@example.com> 1234567890 -0800\" LF\n"
611 " LF\n"
612 " \"Shakespeare\" LF\n"
613 msgstr ""
614 " \"commit 158\" NUL\n"
615 " \"tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9\" LF\n"
616 " \"author Alice <alice@example.com> 1234567890 -0800\" LF\n"
617 " \"committer Bob <bob@example.com> 1234567890 -0800\" LF\n"
618 " LF\n"
619 " \"Shakespeare\" LF\n"
621 #. type: Plain text
622 #: ../en/secrets.txt:179
623 msgid "As before, you can run zpipe or cat-file to see for yourself."
624 msgstr ""
625 "Wie vorhin, kannst Du 'zpipe' oder 'cat-file' benutzen um es für Dich zu "
626 "überprüfen."
628 #. type: Plain text
629 #: ../en/secrets.txt:182
630 msgid ""
631 "This is the first commit, so there are no parent commits, but later commits "
632 "will always contain at least one line identifying a parent commit."
633 msgstr ""
634 "Das ist der erste 'Commit' gewesen, deshalb gibt es keine Eltern-'Commits'. "
635 "Aber spätere 'Commits' werden immer mindestens eine Zeile enthalten, die den "
636 "Eltern-'Commit' identifiziert."
638 #. type: Plain text
639 #: ../en/secrets.txt:184
640 msgid "=== Indistinguishable From Magic ==="
641 msgstr "=== Von Magie nicht zu unterscheiden ==="
643 #. type: Plain text
644 #: ../en/secrets.txt:186
645 msgid ""
646 "Git's secrets seem too simple. It looks like you could mix together a few "
647 "shell scripts and add a dash of C code to cook it up in a matter of hours: a "
648 "melange of basic filesystem operations and SHA1 hashing, garnished with lock "
649 "files and fsyncs for robustness. In fact, this accurately describes the "
650 "earliest versions of Git. Nonetheless, apart from ingenious packing tricks "
651 "to save space, and ingenious indexing tricks to save time, we now know how "
652 "Git deftly changes a filesystem into a database perfect for version control."
653 msgstr ""
654 "Git's Geheimnisse scheinen zu einfach. Es sieht so aus als müsste man nur "
655 "ein paar Kommandozeilenskripte zusammenmixen, einen Schuß C-Code hinzufügen "
656 "und innerhalb ein paar Stunden ist man fertig: eine Mischung von "
657 "grundlegenden Dateisystemoperationen und SHA1-Hash-Berechnungen, garniert "
658 "mit Sperrdateien und Synchronisation für Stabilität. Tatsächlich beschreibt "
659 "dies die früheste Version von Git. Nichtsdestotrotz, abgesehen von "
660 "geschickten Verpackungstricks um Speicherplatz zu sparen und geschickten "
661 "Indizierungstricks um Zeit zu sparen, wissen wir nun, wie Git gewandt ein "
662 "Dateisystem in eine Datenbank verwandelt, das perfekt für eine "
663 "Versionsverwaltung geeignet ist."
665 #. type: Plain text
666 #: ../en/secrets.txt:194
667 msgid ""
668 "For example, if any file within the object database is corrupted by a disk "
669 "error, then its hash will no longer match, alerting us to the problem. By "
670 "hashing hashes of other objects, we maintain integrity at all levels. "
671 "Commits are atomic, that is, a commit can never only partially record "
672 "changes: we can only compute the hash of a commit and store it in the "
673 "database after we already have stored all relevant trees, blobs and parent "
674 "commits. The object database is immune to unexpected interruptions such as "
675 "power outages."
676 msgstr ""
677 "Angenommen, wenn irgendeine Datei in der Objektdatenbank durch einen "
678 "Laufwerksfehler zerstört wird, dann wird sein SHA1-Hash-Wert nicht mehr mit "
679 "seinem Inhalt übereinstimmen und uns sagen, wo das Problem liegt. Durch "
680 "Bilden von SHA1-Hash-Werten aus den SHA1-Hash-Werten anderer Objekte, "
681 "erreichen wir Integrität auf allen Ebenen. 'Commits' sind elementar, das "
682 "heißt, ein 'Commit' kann niemals nur Teile einer Änderung speichern: wir "
683 "können den SHA1-Hash-Wert eines 'Commits' erst dann berechnen und speichern, "
684 "nachdem wir bereits alle relevanten 'Tree'-Objekte, 'Blob'-Objekte und "
685 "Eltern-'Commits' gespeichert haben. Die Objektdatenbank ist immun gegen "
686 "unerwartete Unterbrechungen wie zum Beispiel einen Stromausfall."
688 #. type: Plain text
689 #: ../en/secrets.txt:205
690 msgid ""
691 "We defeat even the most devious adversaries. Suppose somebody attempts to "
692 "stealthily modify the contents of a file in an ancient version of a project. "
693 "To keep the object database looking healthy, they must also change the hash "
694 "of the corresponding blob object since it's now a different string of bytes. "
695 "This means they'll have to change the hash of any tree object referencing "
696 "the file, and in turn change the hash of all commit objects involving such a "
697 "tree, in addition to the hashes of all the descendants of these commits. "
698 "This implies the hash of the official head differs to that of the bad "
699 "repository. By following the trail of mismatching hashes we can pinpoint the "
700 "mutilated file, as well as the commit where it was first corrupted."
701 msgstr ""
702 "Wir können sogar den hinterhältigsten Gegnern widerstehen. Stell Dir vor, "
703 "jemand will den Inhalt einer Datei ändern, die in einer älteren Version "
704 "eines Projekt liegt. Um die Objektdatenbank intakt aussehen zu lassen, "
705 "müssten sie außerdem den SHA1-Hash-Wert des korrespondierenden 'Blob'-Objekt "
706 "ändern, da die Datei nun eine geänderte Zeichenfolge enthält. Das heißt "
707 "auch, dass sie jeden SHA1-Hash-Wert der 'Tree'-Objekte ändern müssen, welche "
708 "dieses Objekt referenzieren und demzufolge alle SHA1-Hash-Werte der 'Commit'-"
709 "Objekte, welche diese 'Tree'-Objekte beinhalten, zusätzlich zu allen "
710 "Abkömmlingen dieses 'Commits'. Das bedeutet auch, dass sich der SHA1-Hash-"
711 "Wert des offiziellen HEAD von dem des manipulierten 'Repository' "
712 "unterscheidet. Folgen wir dem Pfad der differierenden SHA1-Hash-Werte, "
713 "finden wir die verstümmelte Datei, wie auch den 'Commit', in dem sie "
714 "erstmals auftauchte."
716 #. type: Plain text
717 #: ../en/secrets.txt:208
718 msgid ""
719 "In short, so long as the 20 bytes representing the last commit are safe, "
720 "it's impossible to tamper with a Git repository."
721 msgstr ""
722 "Kurz gesagt, so lange die 20 Byte, welche den SHA1-Hash-Wert des letzen "
723 "'Commit' repräsentieren sicher sind, ist es unmöglich ein Git 'Repository' "
724 "zu fälschen."
726 #. type: Plain text
727 #: ../en/secrets.txt:214
728 msgid ""
729 "What about Git's famous features? Branching? Merging? Tags? Mere details. "
730 "The current head is kept in the file +.git/HEAD+, which contains a hash of a "
731 "commit object. The hash gets updated during a commit as well as many other "
732 "commands. Branches are almost the same: they are files in +.git/refs/heads+. "
733 "Tags too: they live in +.git/refs/tags+ but they are updated by a different "
734 "set of commands."
735 msgstr ""
736 "Was ist mit Git's berühmten Fähigkeiten? 'Branching'? 'Merging'? 'Tags'? Nur "
737 "Kleinigkeiten. Der aktuelle HEAD wird in der Datei +.git/HEAD+ gehalten, "
738 "welche den SHA1-Hash-Wert eines 'Commit'-Objekts enthält. Der SHA1-Hash-Wert "
739 "wird während eines 'Commit' aktualisiert, genauso bei vielen anderen "
740 "Anweisungen. 'Branches' sind fast das selbe: sie sind Dateien in +.git/refs/"
741 "heads+. 'Tags' ebenso: sie stehen in +.git/refs/tags+ aber sie werden durch "
742 "einen Satz anderer Anweisungen aktualisiert."