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."
|