File: secrets.po

package info (click to toggle)
gitmagic 20120520-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 1,516 kB
  • sloc: makefile: 88; sh: 38
file content (742 lines) | stat: -rw-r--r-- 31,736 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
# Git Magic - A guide to using Git
# This file is distributed under the GNU GENERAL PUBLIC LICENSE Version 3.
# Benn Lynn <benlynn@gmail.com>, 2007.
# Armin Stebich <armin@lordofbikes.de>, 2010, 2011.
#
msgid ""
msgstr ""
"Project-Id-Version: Git Magic deutsch\n"
"Report-Msgid-Bugs-To: bennlynn@gmail.com\n"
"POT-Creation-Date: 2010-10-30 08:21+0300\n"
"PO-Revision-Date: 2011-07-07 18:53+0200\n"
"Last-Translator: Armin Stebich <armin@lordofbikes.de>\n"
"Language-Team: DE <gitmagic@lordofbikes.de>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: UTF-8\n"
"Plural-Forms: \n"

#. type: Plain text
#: ../en/secrets.txt:2
msgid "== Secrets Revealed =="
msgstr "== Aufgedeckte Geheimnisse =="

#. type: Plain text
#: ../en/secrets.txt:4
msgid ""
"We take a peek under the hood and explain how Git performs its miracles. I "
"will skimp over details. For in-depth descriptions refer to http://www."
"kernel.org/pub/software/scm/git/docs/user-manual.html[the user manual]."
msgstr ""
"Wir werfen einen Blick unter die Motorhaube und erklären, wie Git seine "
"Wunder vollbringt. Ich werde nicht ins Detail gehen. Für tiefer gehende "
"Erklärungen verweise ich auf das http://www.kernel.org/pub/software/scm/git/"
"docs/user-manual.html[englischsprachige Benutzerhandbuch]."

#. type: Plain text
#: ../en/secrets.txt:6
msgid "=== Invisibility ==="
msgstr "=== Unsichtbarkeit ==="

#. type: Plain text
#: ../en/secrets.txt:8
msgid ""
"How can Git be so unobtrusive? Aside from occasional commits and merges, you "
"can work as if you were unaware that version control exists. That is, until "
"you need it, and that's when you're glad Git was watching over you the whole "
"time."
msgstr ""
"Wie kann Git so unauffällig sein? Abgesehen von gelegentlichen 'Commits' und "
"'Merges' kannst Du arbeiten, als würde die Versionsverwaltung nicht "
"existieren. Das heißt, bis Du sie brauchst. Und das ist, wenn Du froh bist, "
"dass Git die ganze Zeit über Dich gewacht hat."

#. type: Plain text
#: ../en/secrets.txt:10
msgid ""
"Other version control systems force you to constantly struggle with red tape "
"and bureaucracy. Permissions of files may be read-only unless you explicitly "
"tell a central server which files you intend to edit. The most basic "
"commands may slow to a crawl as the number of users increases. Work grinds "
"to a halt when the network or the central server goes down."
msgstr ""
"Andere Versionsverwaltungssysteme zwingen Dich ständig Dich mit "
"Verwaltungskram und Bürokratie herumzuschlagen. Dateien sind können "
"schreibgeschützt sein, bis Du einem zentralen Server mitteilst, welche "
"Dateien Du gerne bearbeiten möchtest. Die einfachsten Befehle werden bis zum "
"Schneckentempo verlangsamt, wenn die Anzahl der Anwender steigt. Deine "
"Arbeit kommt zum Stillstand, wenn das Netzwerk oder der zentrale Server weg "
"sind."

#. type: Plain text
#: ../en/secrets.txt:12
msgid ""
"In contrast, Git simply keeps the history of your project in the `.git` "
"directory in your working directory. This is your own copy of the history, "
"so you can stay offline until you want to communicate with others. You have "
"total control over the fate of your files because Git can easily recreate a "
"saved state from `.git` at any time."
msgstr ""
"Im Gegensatz dazu hält Git seinen Verlauf einfach im `.git` Verzeichnis von "
"Deinem Arbeitsverzeichnis. Das ist Deine eigene Kopie der "
"Versionsgeschichte, damit kannst Du so lange offline bleiben, bis Du mit "
"anderen kommunizieren willst. Du hast die absolute Kontrolle über das "
"Schicksal Deiner Dateien, denn Git kann jederzeit einfach einen gesicherten "
"Stand aus `.git` wiederherstellen."

#. type: Plain text
#: ../en/secrets.txt:14
msgid "=== Integrity ==="
msgstr "=== Integrität ==="

#. type: Plain text
#: ../en/secrets.txt:16
msgid ""
"Most people associate cryptography with keeping information secret, but "
"another equally important goal is keeping information safe. Proper use of "
"cryptographic hash functions can prevent accidental or malicious data "
"corruption."
msgstr ""
"Die meisten Leute verbinden mit Kryptographie die Geheimhaltung von "
"Informationen, aber ein genau so wichtiges Ziel ist es Informationen zu "
"sichern. Die richtige Anwendung von kryptographischen Hash-Funktionen kann "
"einen versehentlichen oder bösartigen Datenverlust verhindern."

#. type: Plain text
#: ../en/secrets.txt:18
msgid ""
"A SHA1 hash can be thought of as a unique 160-bit ID number for every string "
"of bytes you'll encounter in your life. Actually more than that: every "
"string of bytes that any human will ever use over many lifetimes."
msgstr ""
"Einen SHA1-Hash-Wert kann man sich als eindeutige 160-Bit Identitätsnummer "
"für jegliche Zeichenkette vorstellen, welche Dir in Deinem ganzen Leben "
"begegnen wird. Sogar mehr als das: jegliche Zeichenfolge, die alle Menschen "
"über mehrere Generationen verwenden."

#. type: Plain text
#: ../en/secrets.txt:20
msgid ""
"As a SHA1 hash is itself a string of bytes, we can hash strings of bytes "
"containing other hashes. This simple observation is surprisingly useful: "
"look up 'hash chains'. We'll later see how Git uses it to efficiently "
"guarantee data integrity."
msgstr ""
"Ein SHA1-Hash-Wert selbst ist eine Zeichenfolge von Bytes. Wir können SHA1-"
"Hash-Werte aus Zeichenfolgen generieren, die selbst SHA1-Hash-Werte "
"enthalten. Diese einfache Beobachtung ist überraschend nützlich: suche nach "
"'hash chains'. Wir werden später sehen, wie Git diese nutzt um effizient die "
"Datenintegrität zu garantieren."

#. type: Plain text
#: ../en/secrets.txt:22
msgid ""
"Briefly, Git keeps your data in the `.git/objects` subdirectory, where "
"instead of normal filenames, you'll find only IDs. By using IDs as "
"filenames, as well as a few lockfiles and timestamping tricks, Git "
"transforms any humble filesystem into an efficient and robust database."
msgstr ""
"Kurz gesagt, Git hält Deine Daten in dem `.git/objects` Unterverzeichnis, wo "
"Du anstelle von normalen Dateinamen nur Identitätsnummern findest. Durch die "
"Verwendung von Identitätsnummern als Dateiname, zusammen mit ein paar "
"Sperrdateien und Zeitstempeltricks, macht Git aus einem einfachen "
"Dateisystem eine effiziente und robuste Datenbank."

#. type: Plain text
#: ../en/secrets.txt:24
msgid "=== Intelligence ==="
msgstr "=== Intelligenz ==="

#. type: Plain text
#: ../en/secrets.txt:26
msgid ""
"How does Git know you renamed a file, even though you never mentioned the "
"fact explicitly? Sure, you may have run *git mv*, but that is exactly the "
"same as a *git rm* followed by a *git add*."
msgstr ""
"Woher weiß Git, dass Du eine Datei umbenannt hast, obwohl Du es ihm niemals "
"explizit mitgeteilt hast? Sicher, Du hast vielleicht *git mv* benutzt, aber "
"das ist exakt das selbe wie *git rm* gefolgt von *git add*."

#. type: Plain text
#: ../en/secrets.txt:28
msgid ""
"Git heuristically ferrets out renames and copies between successive "
"versions. In fact, it can detect chunks of code being moved or copied around "
"between files! Though it cannot cover all cases, it does a decent job, and "
"this feature is always improving. If it fails to work for you, try options "
"enabling more expensive copy detection, and consider upgrading."
msgstr ""
"Git stöbert Umbenennungen und Kopien zwischen aufeinander folgenden "
"Versionen heuristisch auf. Vielmehr kann es sogar Codeblöcke erkennen, die "
"zwischen Dateien hin und her kopiert oder verschoben wurden! Jedoch kann es "
"nicht alle Fälle abdecken, aber es leistet ordentliche Arbeit und diese "
"Eigenschaft wird immer besser. Wenn es bei Dir nicht funktioniert, versuche "
"Optionen zur aufwendigeren Erkennung von Kopien oder erwäge einen Upgrade."

#. type: Plain text
#: ../en/secrets.txt:30
msgid "=== Indexing ==="
msgstr "=== Indizierung ==="

#. type: Plain text
#: ../en/secrets.txt:32
msgid ""
"For every tracked file, Git records information such as its size, creation "
"time and last modification time in a file known as the 'index'. To determine "
"whether a file has changed, Git compares its current stats with those cached "
"in the index. If they match, then Git can skip reading the file again."
msgstr ""
"Für jede überwachte Datei speichert Git Informationen wie deren Größe, ihren "
"Erstellzeitpunkt und den Zeitpunkt der letzten Bearbeitung in einer Datei "
"die wir als 'Index' kennen. Um zu ermitteln, ob eine Datei verändert wurde, "
"vergleicht Git den aktuellen Status mit dem im Index gespeicherten. Stimmen "
"diese Daten überein, kann Git das Lesen des Dateiinhalts überspringen."

#. type: Plain text
#: ../en/secrets.txt:35
msgid ""
"Since stat calls are considerably faster than file reads, if you only edit a "
"few files, Git can update its state in almost no time."
msgstr ""
"Da das Abfragen des Dateistatus erheblich schneller ist als das Lesen der "
"Datei, kann Git, wenn Du nur ein paar Dateien verändert hast, seinen Status "
"im Nu aktualisieren."

#. type: Plain text
#: ../en/secrets.txt:40
msgid ""
"We stated earlier that the index is a staging area. Why is a bunch of file "
"stats a staging area? Because the add command puts files into Git's database "
"and updates these stats, while the commit command, without options, creates "
"a commit based only on these stats and the files already in the database."
msgstr ""
"Wir haben früher festgestellt, dass der Index ein Bereitstellungsraum ist. "
"Warum kann ein Haufen von Dateistatusinformationen ein Bereitstellungsraum "
"sein? Weil die 'add' Anweisung Dateien in die Git Datenbank befördert und "
"die Dateistatusinformationen aktualisiert, während die 'commit' Anweisung, "
"ohne Optionen, einen 'Commit' nur auf Basis der Dateistatusinformationen "
"erzeugt, weil die Dateien ja schon in der Datenbank sind."

#. type: Plain text
#: ../en/secrets.txt:42
msgid "=== Git's Origins ==="
msgstr "=== Git's Wurzeln ==="

#. type: Plain text
#: ../en/secrets.txt:44
msgid ""
"This http://lkml.org/lkml/2005/4/6/121[Linux Kernel Mailing List post] "
"describes the chain of events that led to Git. The entire thread is a "
"fascinating archaeological site for Git historians."
msgstr ""
"Dieser http://lkml.org/lkml/2005/4/6/121['Linux Kernel Mailing List' "
"Beitrag] beschreibt die Kette von Ereignissen, die zu Git geführt haben. Der "
"ganze Beitrag ist eine faszinierende archäologische Seite für Git Historiker."

#. type: Plain text
#: ../en/secrets.txt:46
msgid "=== The Object Database ==="
msgstr "=== Die Objektdatenbank ==="

#. type: Plain text
#: ../en/secrets.txt:52
msgid ""
"Every version of your data is kept in the 'object database', which lives in "
"the subdirectory `.git/objects`; the other residents of `.git/` hold lesser "
"data: the index, branch names, tags, configuration options, logs, the "
"current location of the head commit, and so on. The object database is "
"elementary yet elegant, and the source of Git's power."
msgstr ""
"Jegliche Version Deiner Daten wird in der Objektdatenbank gehalten, welche "
"im Unterverzeichnis `.git/objects` liegt; Die anderen Orte in `.git/` "
"enthalten weniger wichtige Daten: den Index, 'Branch' Namen, Bezeichner "
"('tags'), Konfigurationsoptionen, Logdateien, die Position des aktuellen "
"'HEAD Commit' und so weiter. Die Objektdatenbank ist einfach aber trotzdem "
"elegant und sie ist die Quelle von Git's Macht."

#. type: Plain text
#: ../en/secrets.txt:55
msgid ""
"Each file within `.git/objects` is an 'object'. There are 3 kinds of objects "
"that concern us: 'blob' objects, 'tree' objects, and 'commit' objects."
msgstr ""
"Jede Datei in `.git/objects` ist ein 'Objekt'. Es gibt drei Arten von "
"Objekten die uns betreffen: 'Blob'-, 'Tree'-, und 'Commit'-Objekte."

#. type: Plain text
#: ../en/secrets.txt:57
msgid "=== Blobs ==="
msgstr "=== Blobs ==="

#. type: Plain text
#: ../en/secrets.txt:59
msgid ""
"First, a magic trick. Pick a filename, any filename. In an empty directory:"
msgstr ""
"Zuerst ein Zaubertrick. Suche Dir einen Dateinamen aus, irgendeinen. In "
"einem leeren Verzeichnis:"

#. type: Plain text
#: ../en/secrets.txt:64
#, no-wrap
msgid ""
" $ echo sweet > YOUR_FILENAME\n"
" $ git init\n"
" $ git add .\n"
" $ find .git/objects -type f\n"
msgstr ""
" $ echo sweet > DEIN_DATEINAME\n"
" $ git init\n"
" $ git add .\n"
" $ find .git/objects -type f\n"

#. type: Plain text
#: ../en/secrets.txt:66
msgid "You'll see +.git/objects/aa/823728ea7d592acc69b36875a482cdf3fd5c8d+."
msgstr ""
"Du wirst folgendes sehen: +.git/objects/"
"aa/823728ea7d592acc69b36875a482cdf3fd5c8d+."

#. type: Plain text
#: ../en/secrets.txt:69
msgid ""
"How do I know this without knowing the filename? It's because the SHA1 hash "
"of:"
msgstr ""
"Wie konnte ich das wissen, ohne den Dateiname zu kennen? Weil der SHA1-Hash-"
"Wert von:"

#. type: Plain text
#: ../en/secrets.txt:71
#, no-wrap
msgid " \"blob\" SP \"6\" NUL \"sweet\" LF\n"
msgstr " \"blob\" SP \"6\" NUL \"sweet\" LF\n"

#. type: Plain text
#: ../en/secrets.txt:75
msgid ""
"is aa823728ea7d592acc69b36875a482cdf3fd5c8d, where SP is a space, NUL is a "
"zero byte and LF is a linefeed. You can verify this by typing:"
msgstr ""
"aa823728ea7d592acc69b36875a482cdf3fd5c8d ist. Wobei SP ein Leerzeichen ist, "
"NUL ist ein Nullbyte und LF ist ein Zeilenumbruch. Das kannst Du "
"kontrollieren, durch die Eingabe von:"

#. type: Plain text
#: ../en/secrets.txt:77
#, no-wrap
msgid "  $ printf \"blob 6\\000sweet\\n\" | sha1sum\n"
msgstr "  $ printf \"blob 6\\000sweet\\n\" | sha1sum\n"

#. type: Plain text
#: ../en/secrets.txt:84
msgid ""
"Git is 'content-addressable': files are not stored according to their "
"filename, but rather by the hash of the data they contain, in a file we call "
"a 'blob object'. We can think of the hash as a unique ID for a file's "
"contents, so in a sense we are addressing files by their content. The "
"initial `blob 6` is merely a header consisting of the object type and its "
"length in bytes; it simplifies internal bookkeeping."
msgstr ""
"Git ist 'assoziativ': Dateien werden nicht nach Ihren Namen gespeichert, "
"sondern eher nach dem SHA1-Hash-Wert der Daten, welche sie enthalten, in "
"einer Datei, die wir als 'Blob'-Objekt bezeichnen. Wir können uns den SHA1-"
"Hash-Wert als eindeutige Identnummer des Dateiinhalts vorstellen, was "
"sinngemäß bedeutet, dass die Dateien über ihren Inhalt adressiert werden. "
"Das führende `blob 6` ist lediglich ein Vermerk, der sich aus dem Objekttyp "
"und seiner Länge in Bytes zusammensetzt; er vereinfacht die interne "
"Verwaltung."

#. type: Plain text
#: ../en/secrets.txt:87
msgid ""
"Thus I could easily predict what you would see. The file's name is "
"irrelevant: only the data inside is used to construct the blob object."
msgstr ""
"So konnte ich einfach vorhersagen, was Du sehen wirst. Der Dateiname ist "
"irrelevant: nur der Dateiinhalt wird zum Erstellen des 'Blob'-Objekt "
"verwendet."

#. type: Plain text
#: ../en/secrets.txt:91
msgid ""
"You may be wondering what happens to identical files. Try adding copies of "
"your file, with any filenames whatsoever. The contents of +.git/objects+ "
"stay the same no matter how many you add. Git only stores the data once."
msgstr ""
"Du wirst Dich fragen, was mit identischen Dateien ist. Versuche Kopien "
"Deiner Datei hinzuzufügen, mit beliebigen Dateinamen. Der Inhalt von +.git/"
"objects+ bleibt der selbe, ganz egal wieviele Dateien Du hinzufügst. Git "
"speichert den Dateiinhalt nur ein einziges Mal."

#. type: Plain text
#: ../en/secrets.txt:95
msgid ""
"By the way, the files within +.git/objects+ are compressed with zlib so you "
"should not stare at them directly. Filter them through http://www.zlib.net/"
"zpipe.c[zpipe -d], or type:"
msgstr ""
"Übrigens, die Dateien in +.git/objects+ sind mit zlib komprimiert, Du "
"solltest sie also nicht direkt anschauen. Filtere sie durch http://www.zlib."
"net/zpipe.c[zpipe -d], oder gib ein:"

#. type: Plain text
#: ../en/secrets.txt:97
#, no-wrap
msgid " $ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
msgstr " $ git cat-file -p aa823728ea7d592acc69b36875a482cdf3fd5c8d\n"

#. type: Plain text
#: ../en/secrets.txt:99
msgid "which pretty-prints the given object."
msgstr "was Dir das Objekt im Klartext anzeigt."

#. type: Plain text
#: ../en/secrets.txt:101
msgid "=== Trees ==="
msgstr "=== 'Trees' ==="

#. type: Plain text
#: ../en/secrets.txt:104
msgid ""
"But where are the filenames? They must be stored somewhere at some stage.  "
"Git gets around to the filenames during a commit:"
msgstr ""
"Aber wo sind die Dateinamen? Sie müssen irgendwo gespeichert sein. Git kommt "
"beim 'Commit' dazu sich um die Dateinamen zu kümmern:"

#. type: Plain text
#: ../en/secrets.txt:107
#, no-wrap
msgid ""
" $ git commit  # Type some message.\n"
" $ find .git/objects -type f\n"
msgstr ""
" $ git commit  # Schreibe eine Bemerkung.\n"
" $ find .git/objects -type f\n"

#. type: Plain text
#: ../en/secrets.txt:109
msgid ""
"You should now see 3 objects. This time I cannot tell you what the 2 new "
"files are, as it partly depends on the filename you picked. We'll proceed "
"assuming you chose ``rose''. If you didn't, you can rewrite history to make "
"it look like you did:"
msgstr ""
"Du solltest nun drei Objekte sehen. Dieses mal kann ich Dir nicht sagen, wie "
"die zwei neuen Dateien heißen, weil es zum Teil vom gewählten Dateiname "
"abhängt, den Du ausgesucht hast. Fahren wir fort mit der Annahme, Du hast "
"eine Datei ``rose'' genannt. Wenn nicht, kannst Du den Verlauf so "
"umschreiben, dass es so aussieht als hättest Du es:"

#. type: Plain text
#: ../en/secrets.txt:112
#, no-wrap
msgid ""
" $ git filter-branch --tree-filter 'mv YOUR_FILENAME rose'\n"
" $ find .git/objects -type f\n"
msgstr ""
" $ git filter-branch --tree-filter 'mv DEIN_DATEINAME rose'\n"
" $ find .git/objects -type f\n"

#. type: Plain text
#: ../en/secrets.txt:116
msgid ""
"Now you should see the file +.git/objects/05/"
"b217bb859794d08bb9e4f7f04cbda4b207fbe9+, because this is the SHA1 hash of "
"its contents:"
msgstr ""
"Nun müsstest Du die Datei +.git/objects/05/"
"b217bb859794d08bb9e4f7f04cbda4b207fbe9+ sehen, denn das ist der SHA1-Hash-"
"Wert ihres Inhalts:"

#. type: Plain text
#: ../en/secrets.txt:118
#, no-wrap
msgid " \"tree\" SP \"32\" NUL \"100644 rose\" NUL 0xaa823728ea7d592acc69b36875a482cdf3fd5c8d\n"
msgstr " \"tree\" SP \"32\" NUL \"100644 rose\" NUL 0xaa823728ea7d592acc69b36875a482cdf3fd5c8d\n"

#. type: Plain text
#: ../en/secrets.txt:120
msgid "Check this file does indeed contain the above by typing:"
msgstr ""
"Prüfe, ob diese Datei tatsächlich dem obigen Inhalt entspricht, durch "
"Eingabe von:"

#. type: Plain text
#: ../en/secrets.txt:122
#, no-wrap
msgid " $ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch\n"
msgstr " $ echo 05b217bb859794d08bb9e4f7f04cbda4b207fbe9 | git cat-file --batch\n"

#. type: Plain text
#: ../en/secrets.txt:124
msgid "With zpipe, it's easy to verify the hash:"
msgstr "Mit zpipe, ist es einfach den SHA1-Hash-Wert zu prüfen:"

#. type: Plain text
#: ../en/secrets.txt:126
#, no-wrap
msgid " $ zpipe -d < .git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9 | sha1sum\n"
msgstr " $ zpipe -d < .git/objects/05/b217bb859794d08bb9e4f7f04cbda4b207fbe9 | sha1sum\n"

#. type: Plain text
#: ../en/secrets.txt:129
msgid ""
"Hash verification is trickier via cat-file because its output contains more "
"than the raw uncompressed object file."
msgstr ""
"Die SHA1-Hash-Wert Prüfung mit 'cat-file' ist etwas kniffliger, da dessen "
"Ausgabe mehr als die rohe unkomprimierte Objektdatei enthält."

#. type: Plain text
#: ../en/secrets.txt:135
msgid ""
"This file is a 'tree' object: a list of tuples consisting of a file type, a "
"filename, and a hash. In our example, the file type is 100644, which means "
"`rose` is a normal file, and the hash is the blob object that contains the "
"contents of `rose'. Other possible file types are executables, symlinks or "
"directories. In the last case, the hash points to a tree object."
msgstr ""
"Diese Datei ist ein 'Tree'-Objekt: eine Liste von Datensätzen, bestehend aus "
"dem Dateityp, dem Dateinamen und einem SHA1-Hash-Wert. In unserem Beispiel "
"ist der Dateityp 100644, was bedeutet, dass `rose` eine normale Datei ist "
"und der SHA1-Hash-Wert entspricht dem 'Blob'-Objekt, welches den Inhalt von "
"`rose` enthält. Andere mögliche Dateitypen sind ausführbare Programmdateien, "
"symbolische Links oder Verzeichnisse. Im letzten Fall zeigt der SHA1-Hash-"
"Wert auf ein 'Tree'-Objekt."

#. type: Plain text
#: ../en/secrets.txt:139
msgid ""
"If you ran filter-branch, you'll have old objects you no longer need. "
"Although they will be jettisoned automatically once the grace period "
"expires, we'll delete them now to make our toy example easier to follow:"
msgstr ""
"Wenn Du 'filter-branch' aufrufst, bekommst Du alte Objekte, welche nicht "
"länger benötigt werden. Obwohl sie automatisch über Bord geworfen werden, "
"wenn ihre Gnadenfrist abgelaufen ist, wollen wir sie nun löschen, damit wir "
"unserem Beispiel besser folgen können."

#. type: Plain text
#: ../en/secrets.txt:143
#, no-wrap
msgid ""
" $ rm -r .git/refs/original\n"
" $ git reflog expire --expire=now --all\n"
" $ git prune\n"
msgstr ""
" $ rm -r .git/refs/original\n"
" $ git reflog expire --expire=now --all\n"
" $ git prune\n"

#. type: Plain text
#: ../en/secrets.txt:150
msgid ""
"For real projects you should typically avoid commands like this, as you are "
"destroying backups. If you want a clean repository, it is usually best to "
"make a fresh clone. Also, take care when directly manipulating +.git+: what "
"if a Git command is running at the same time, or a sudden power outage "
"occurs? In general, refs should be deleted with *git update-ref -d*, though "
"usually it's safe to remove +refs/original+ by hand."
msgstr ""
"Für reale Projekte solltest Du solche Anweisungen üblicherweise vermeiden, "
"da Du dadurch Datensicherungen zerstörst. Wenn Du ein sauberes 'Repository' "
"willst, ist es am besten, einen neuen Klon anzulegen. Sei auch vorsichtig, "
"wenn Du +.git+ direkt manipulierst: was, wenn zeitgleich ein Git Kommando "
"ausgeführt wird oder plötzlich der Strom ausfällt? Generell sollten "
"Referenzen mit *git update-ref -d* gelöscht werden, auch wenn es gewöhnlich "
"sicher ist +refs/original+ von Hand zu löschen."

#. type: Plain text
#: ../en/secrets.txt:152
msgid "=== Commits ==="
msgstr "=== 'Commits' ==="

#. type: Plain text
#: ../en/secrets.txt:156
msgid ""
"We've explained 2 of the 3 objects. The third is a 'commit' object. Its "
"contents depend on the commit message as well as the date and time it was "
"created. To match what we have here, we'll have to tweak it a little:"
msgstr ""
"Wir haben nun zwei von drei Objekten erklärt. Das dritte ist ein 'Commit'-"
"Objekt. Sein Inhalt hängt von der 'Commit'-Beschreibung ab, wie auch vom "
"Zeitpunkt der Erstellung. Damit alles zu unserem Beispiel passt, müssen wir "
"ein wenig tricksen:"

#. type: Plain text
#: ../en/secrets.txt:166
#, no-wrap
msgid ""
" $ git commit --amend -m Shakespeare  # Change the commit message.\n"
" $ git filter-branch --env-filter 'export\n"
"     GIT_AUTHOR_DATE=\"Fri 13 Feb 2009 15:31:30 -0800\"\n"
"     GIT_AUTHOR_NAME=\"Alice\"\n"
"     GIT_AUTHOR_EMAIL=\"alice@example.com\"\n"
"     GIT_COMMITTER_DATE=\"Fri, 13 Feb 2009 15:31:30 -0800\"\n"
"     GIT_COMMITTER_NAME=\"Bob\"\n"
"     GIT_COMMITTER_EMAIL=\"bob@example.com\"'  # Rig timestamps and authors.\n"
" $ find .git/objects -type f\n"
msgstr ""
" $ git commit --amend -m Shakespeare  # Ändere die Bemerkung.\n"
" $ git filter-branch --env-filter 'export\n"
"     GIT_AUTHOR_DATE=\"Fri 13 Feb 2009 15:31:30 -0800\"\n"
"     GIT_AUTHOR_NAME=\"Alice\"\n"
"     GIT_AUTHOR_EMAIL=\"alice@example.com\"\n"
"     GIT_COMMITTER_DATE=\"Fri, 13 Feb 2009 15:31:30 -0800\"\n"
"     GIT_COMMITTER_NAME=\"Bob\"\n"
"     GIT_COMMITTER_EMAIL=\"bob@example.com\"'  # Manipuliere Zeitstempel und Autor.\n"
" $ find .git/objects -type f\n"

#. type: Plain text
#: ../en/secrets.txt:170
msgid ""
"You should now see +.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187+ "
"which is the SHA1 hash of its contents:"
msgstr ""
"Du solltest nun +.git/objects/49/993fe130c4b3bf24857a15d7969c396b7bc187+ "
"finden, was dem SHA1-Hash-Wert seines Inhalts entspricht:"

#. type: Plain text
#: ../en/secrets.txt:177
#, no-wrap
msgid ""
" \"commit 158\" NUL\n"
" \"tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9\" LF\n"
" \"author Alice <alice@example.com> 1234567890 -0800\" LF\n"
" \"committer Bob <bob@example.com> 1234567890 -0800\" LF\n"
" LF\n"
" \"Shakespeare\" LF\n"
msgstr ""
" \"commit 158\" NUL\n"
" \"tree 05b217bb859794d08bb9e4f7f04cbda4b207fbe9\" LF\n"
" \"author Alice <alice@example.com> 1234567890 -0800\" LF\n"
" \"committer Bob <bob@example.com> 1234567890 -0800\" LF\n"
" LF\n"
" \"Shakespeare\" LF\n"

#. type: Plain text
#: ../en/secrets.txt:179
msgid "As before, you can run zpipe or cat-file to see for yourself."
msgstr ""
"Wie vorhin, kannst Du 'zpipe' oder 'cat-file' benutzen um es für Dich zu "
"überprüfen."

#. type: Plain text
#: ../en/secrets.txt:182
msgid ""
"This is the first commit, so there are no parent commits, but later commits "
"will always contain at least one line identifying a parent commit."
msgstr ""
"Das ist der erste 'Commit' gewesen, deshalb gibt es keine Eltern-'Commits'. "
"Aber spätere 'Commits' werden immer mindestens eine Zeile enthalten, die den "
"Eltern-'Commit' identifiziert."

#. type: Plain text
#: ../en/secrets.txt:184
msgid "=== Indistinguishable From Magic ==="
msgstr "=== Von Magie nicht zu unterscheiden ==="

#. type: Plain text
#: ../en/secrets.txt:186
msgid ""
"Git's secrets seem too simple. It looks like you could mix together a few "
"shell scripts and add a dash of C code to cook it up in a matter of hours: a "
"melange of basic filesystem operations and SHA1 hashing, garnished with lock "
"files and fsyncs for robustness. In fact, this accurately describes the "
"earliest versions of Git. Nonetheless, apart from ingenious packing tricks "
"to save space, and ingenious indexing tricks to save time, we now know how "
"Git deftly changes a filesystem into a database perfect for version control."
msgstr ""
"Git's Geheimnisse scheinen zu einfach. Es sieht so aus als müsste man nur "
"ein paar Kommandozeilenskripte zusammenmixen, einen Schuß C-Code hinzufügen "
"und innerhalb ein paar Stunden ist man fertig: eine Mischung von "
"grundlegenden Dateisystemoperationen und SHA1-Hash-Berechnungen, garniert "
"mit Sperrdateien und Synchronisation für Stabilität. Tatsächlich beschreibt "
"dies die früheste Version von Git. Nichtsdestotrotz, abgesehen von "
"geschickten Verpackungstricks um Speicherplatz zu sparen und geschickten "
"Indizierungstricks um Zeit zu sparen, wissen wir nun, wie Git gewandt ein "
"Dateisystem in eine Datenbank verwandelt, das perfekt für eine "
"Versionsverwaltung geeignet ist."

#. type: Plain text
#: ../en/secrets.txt:194
msgid ""
"For example, if any file within the object database is corrupted by a disk "
"error, then its hash will no longer match, alerting us to the problem. By "
"hashing hashes of other objects, we maintain integrity at all levels. "
"Commits are atomic, that is, a commit can never only partially record "
"changes: we can only compute the hash of a commit and store it in the "
"database after we already have stored all relevant trees, blobs and parent "
"commits. The object database is immune to unexpected interruptions such as "
"power outages."
msgstr ""
"Angenommen, wenn irgendeine Datei in der Objektdatenbank durch einen "
"Laufwerksfehler zerstört wird, dann wird sein SHA1-Hash-Wert nicht mehr mit "
"seinem Inhalt übereinstimmen und uns sagen, wo das Problem liegt. Durch "
"Bilden von SHA1-Hash-Werten aus den SHA1-Hash-Werten anderer Objekte, "
"erreichen wir Integrität auf allen Ebenen. 'Commits' sind elementar, das "
"heißt, ein 'Commit' kann niemals nur Teile einer Änderung speichern: wir "
"können den SHA1-Hash-Wert eines 'Commits' erst dann berechnen und speichern, "
"nachdem wir bereits alle relevanten 'Tree'-Objekte, 'Blob'-Objekte und "
"Eltern-'Commits' gespeichert haben. Die Objektdatenbank ist immun gegen "
"unerwartete Unterbrechungen wie zum Beispiel einen Stromausfall."

#. type: Plain text
#: ../en/secrets.txt:205
msgid ""
"We defeat even the most devious adversaries. Suppose somebody attempts to "
"stealthily modify the contents of a file in an ancient version of a project. "
"To keep the object database looking healthy, they must also change the hash "
"of the corresponding blob object since it's now a different string of bytes. "
"This means they'll have to change the hash of any tree object referencing "
"the file, and in turn change the hash of all commit objects involving such a "
"tree, in addition to the hashes of all the descendants of these commits. "
"This implies the hash of the official head differs to that of the bad "
"repository. By following the trail of mismatching hashes we can pinpoint the "
"mutilated file, as well as the commit where it was first corrupted."
msgstr ""
"Wir können sogar den hinterhältigsten Gegnern widerstehen. Stell Dir vor, "
"jemand will den Inhalt einer Datei ändern, die in einer älteren Version "
"eines Projekt liegt. Um die Objektdatenbank intakt aussehen zu lassen, "
"müssten sie außerdem den SHA1-Hash-Wert des korrespondierenden 'Blob'-Objekt "
"ändern, da die Datei nun eine geänderte Zeichenfolge enthält. Das heißt "
"auch, dass sie jeden SHA1-Hash-Wert der 'Tree'-Objekte ändern müssen, welche "
"dieses Objekt referenzieren und demzufolge alle SHA1-Hash-Werte der 'Commit'-"
"Objekte, welche diese 'Tree'-Objekte beinhalten, zusätzlich zu allen "
"Abkömmlingen dieses 'Commits'. Das bedeutet auch, dass sich der SHA1-Hash-"
"Wert des offiziellen HEAD von dem des manipulierten 'Repository' "
"unterscheidet. Folgen wir dem Pfad der differierenden SHA1-Hash-Werte, "
"finden wir die verstümmelte Datei, wie auch den 'Commit', in dem sie "
"erstmals auftauchte."

#. type: Plain text
#: ../en/secrets.txt:208
msgid ""
"In short, so long as the 20 bytes representing the last commit are safe, "
"it's impossible to tamper with a Git repository."
msgstr ""
"Kurz gesagt, so lange die 20 Byte, welche den SHA1-Hash-Wert des letzen "
"'Commit' repräsentieren sicher sind, ist es unmöglich ein Git 'Repository' "
"zu fälschen."

#. type: Plain text
#: ../en/secrets.txt:214
msgid ""
"What about Git's famous features? Branching? Merging? Tags? Mere details. "
"The current head is kept in the file +.git/HEAD+, which contains a hash of a "
"commit object. The hash gets updated during a commit as well as many other "
"commands. Branches are almost the same: they are files in +.git/refs/heads+. "
"Tags too: they live in +.git/refs/tags+ but they are updated by a different "
"set of commands."
msgstr ""
"Was ist mit Git's berühmten Fähigkeiten? 'Branching'? 'Merging'? 'Tags'? Nur "
"Kleinigkeiten. Der aktuelle HEAD wird in der Datei +.git/HEAD+ gehalten, "
"welche den SHA1-Hash-Wert eines 'Commit'-Objekts enthält. Der SHA1-Hash-Wert "
"wird während eines 'Commit' aktualisiert, genauso bei vielen anderen "
"Anweisungen. 'Branches' sind fast das selbe: sie sind Dateien in +.git/refs/"
"heads+. 'Tags' ebenso: sie stehen in +.git/refs/tags+ aber sie werden durch "
"einen Satz anderer Anweisungen aktualisiert."