Git Magic deutsch - en to de translation catalogue (63 entries)

note: type: Plain text
en: == Git Grandmastery ==
de: == Git für Fortgeschrittene ==

note: type: Plain text
en: By now, you should be able to navigate the *git help* pages and understand almost everything. However, pinpointing the exact command required to solve a given problem can be tedious. Perhaps I can save you some time: below are some recipes I have needed in the past.
de: Mittlerweile solltest Du Dich in den *git help* Seiten zurechtfinden und das meiste verstanden haben. Trotzdem kann es langwierig sein, den exakten Befehl zur Lösung einer bestimmten Aufgabe herauszufinden. Vielleicht kann ich Dir etwas Zeit sparen: Nachfolgend findest Du ein paar Rezepte, die ich in der Vergangenheit gebraucht habe.

note: type: Plain text
en: === Source Releases ===
de: === Quellcode veröffentlichen ===

note: type: Plain text
en: For my projects, Git tracks exactly the files I'd like to archive and release to users. To create a tarball of the source code, I run:
de: Bei meinen Projekten verwaltet Git genau die Dateien, die ich archivieren und für andere Benutzer veröffentlichen will. Um ein tarball-Archiv des Quellcodes zu erzeugen, verwende ich den Befehl:

note: type: Plain text
en: === Commit What Changed ===
de: === 'Commite' Änderungen ===

note: type: Plain text
en: Telling Git when you've added, deleted and renamed files is troublesome for certain projects. Instead, you can type:
de: Git mitzuteilen, welche Dateien man hinzugefügt, gelöscht und umbenannt hat, ist für manche Projekte sehr mühsam. Stattdessen kann man folgendes eingeben:

note: type: Plain text
en: Git will look at the files in the current directory and work out the details by itself. Instead of the second add command, run `git commit -a` if you also intend to commit at this time. See *git help ignore* for how to specify files that should be ignored.
de: Git wird sich die Dateien im aktuellen Verzeichnis ansehen und sich die Details selbst erarbeiten. Anstelle des zweiten Befehl kann man auch `git commit -a` ausführen, falls man an dieser Stelle ohnehin 'comitten' möchte. Siehe *git help ignore* um zu sehen, wie man Dateien definiert, die ignoriert werden sollen.

note: type: Plain text
en: You can perform the above in a single pass with:
de: Man kann das aber auch in einem einzigen Schritt ausführen mit:

note: type: Plain text
en: The *-z* and *-0* options prevent ill side-effects from filenames containing strange characters. As this command adds ignored files, you may want to use the `-x` or `-X` option.
de: Die *-z* und *-0* Optionen verhindern unerwünschte Nebeneffekte durch Dateinamen mit ungewöhnlichen Zeichen. Da diese Anweisung aber auch zu ignorierende Dateien hinzufügt, kann man noch die `-x` oder `-X` Option hinzufügen.

note: type: Plain text
en: === My Commit Is Too Big! ===
de: === Mein 'Commit' ist zu groß! ===

note: type: Plain text
en: Have you neglected to commit for too long? Been coding furiously and forgotten about source control until now? Made a series of unrelated changes, because that's your style?
de: Hast Du es zu lange versäumt zu 'comitten'? Hast Du so versessen programmiert, daß Du darüber die Quellcodeverwaltung vergessen hast? Machst Du eine Serie von unabhängigen Änderungen, weil es Dein Stil ist?

note: type: Plain text
en: No worries. Run:
de: Keine Sorge, gib ein:

note: type: Plain text
en: For each edit you made, Git will show you the hunk of code that was changed, and ask if it should be part of the next commit. Answer with "y" or "n". You have other options, such as postponing the decision; type "?" to learn more.
de: Für jede Änderung, die Du gemacht hast, zeigt Git Dir die Codepassagen, die sich geändert haben und fragt ob sie Teil des nächsten 'Commit' sein sollen. Antworte mit "y" für Ja oder "n" für Nein. Du hast auch noch andere Optionen, z.B. den Aufschub der Entscheidung; drücke "?" um mehr zu erfahren.

note: type: Plain text
en: Once you're satisfied, type
de: Wenn Du zufrieden bist, gib

note: type: Plain text
en: to commit precisely the changes you selected (the 'staged' changes). Make sure you omit the *-a* option, otherwise Git will commit all the edits.
de: ein um exakt die ausgewählten Änderungen zu 'comitten' (die "inszenierten" Änderungen). Achte darauf, nicht die Option *-a* einzusetzen, anderenfalls wird Git alle Änderungen 'comitten'.

note: type: Plain text
en: What if you've edited many files in many places? Reviewing each change one by one becomes frustratingly mind-numbing. In this case, use *git add -i*, whose interface is less straightforward, but more flexible. With a few keystrokes, you can stage or unstage several files at a time, or review and select changes in particular files only. Alternatively, run *git commit \--interactive* which automatically commits after you're done.
de: Was ist, wenn Du viele Dateien an verschiedenen Orten bearbeitet hast? Jede Datei einzeln nachzuprüfen ist frustrierend und ermüdend. In diesem Fall verwende *git add -i*, dessen Bedienung ist nicht ganz einfach, dafür aber sehr flexibel. Mit ein paar Tastendrücken kannst Du mehrere geänderte Dateien für den 'Commit' hinzufügen ('stage') oder entfernen ('unstage') oder Änderungen einzelner Dateien nachprüfen und hinzufügen. Alternativ kannst Du *git commit \--interactive* verwenden, was dann automatisch die ausgewählten Änderungen 'commited' nachdem Du fertig bist.

note: type: Plain text
en: === The Index: Git's Staging Area ===
de: === Der Index: Git's Bereitstellungsraum ===

note: type: Plain text
en: So far we have avoided Git's famous 'index', but we must now confront it to explain the above. The index is a temporary staging area. Git seldom shuttles data directly between your project and its history. Rather, Git first writes data to the index, and then copies the data in the index to its final destination.
de: Bis jetzt haben wir Git's berühmten 'Index' gemieden, aber nun müssen wir uns mit ihm auseinandersetzen um das bisherige zu erklären. Der Index ist ein temporärer Bereitstellungsraum. Git tauscht selten Daten direkt zwischen Deinem Projekt und seiner Versionsgeschichte aus. Vielmehr schreibt Git die Daten zuerst in den Index, danach kopiert es die Daten aus dem Index an ihren eigentlichen Bestimmungsort.

note: type: Plain text
en: For example, *commit -a* is really a two-step process. The first step places a snapshot of the current state of every tracked file into the index. The second step permanently records the snapshot now in the index. Committing without the *-a* option only performs the second step, and only makes sense after running commands that somehow change the index, such as *git add*.
de: Zum Beispiel ist *commit -a* eigentlich ein zweistufiger Prozess. Der erste Schritt erstellt einen Schnappschuß des aktuellen Status jeder überwachten Datei im Index. Der zweite Schritt speichert dauerhaft den Schnappschuß, der sich nun im Index befindet. Ein 'Commit' ohne die *-a* Option führt nur den zweiten Schritt aus und macht nur wirklich Sinn, wenn zuvor eine Anweisung angewendet wurde, welche den Index verändert, wie zum Beispiel *git add*.

note: type: Plain text
en: Usually we can ignore the index and pretend we are reading straight from and writing straight to the history. On this occasion, we want finer control, so we manipulate the index. We place a snapshot of some, but not all, of our changes into the index, and then permanently record this carefully rigged snapshot.
de: Normalerweise können wir den Index ignorieren und so tun als würden wir direkt aus der Versionsgeschichte lesen oder in sie schreiben. In diesem Fall wollen wir aber mehr Kontrolle, also manipulieren wir den Index. Wir erstellen einen Schnappschuß einiger, aber nicht aller unser Änderungen im Index und speichern dann diesen sorgfältig zusammengestellten Schnappschuß permanent.

note: type: Plain text
en: === Don't Lose Your HEAD ===
de: === Verliere nicht Deinen KOPF ===

note: type: Plain text
en: The HEAD tag is like a cursor that normally points at the latest commit, advancing with each new commit. Some Git commands let you move it. For example:
de: Der HEAD Bezeichner ist wie ein Cursor, der normalerweise auf den jüngsten 'Commit' zeigt und mit jedem neuen 'Commit' voranschreitet. Einige Git Anweisungen lassen Dich ihn manipulieren. Zum Beispiel:

note: type: Plain text
en: will move the HEAD three commits back. Thus all Git commands now act as if you hadn't made those last three commits, while your files remain in the present. See the help page for some applications.
de: bewegt den HEAD Bezeichner drei 'Commits' zurück. Dadurch agieren nun alle Git Anweisungen als hätte es die drei letzten 'Commits' nicht gegeben, während deine Dateien unverändert erhalten bleiben. Siehe auf der Git Hilfeseite für einige Anwendungsbeispiele.

note: type: Plain text
en: But how can you go back to the future? The past commits know nothing of the future.
de: Aber wie kannst Du zurück in die Zukunft? Die vergangenen 'Commits' wissen nichts von der Zukunft.

note: type: Plain text
en: If you have the SHA1 of the original HEAD then:
de: Wenn Du den SHA1 Schlüssel vom originalen HEAD hast, dann:

note: type: Plain text
en: But suppose you never took it down? Don't worry: for commands like these, Git saves the original HEAD as a tag called ORIG_HEAD, and you can return safe and sound with:
de: Aber stell Dir vor, Du hast ihn niemals notiert? Keine Sorge: Für solche Anweisungen sichert Git den original HEAD als Bezeichner mit dem Namen ORIG_HEAD und Du kannst gesund und munter zurückkehren mit:

note: type: Plain text
en: === HEAD-hunting ===
de: === KOPF-Jagd ===

note: type: Plain text
en: Perhaps ORIG_HEAD isn't enough. Perhaps you've just realized you made a monumental mistake and you need to go back to an ancient commit in a long-forgotten branch.
de: Möglicherweise reicht ORIG_HEAD nicht aus. Vielleicht hast Du gerade bemerkt, dass Du einen kapitalen Fehler gemacht hast und nun musst Du zu einem uralten 'Commit' in einem länst vergessenen 'Branch' zurück.

note: type: Plain text
en: By default, Git keeps a commit for at least two weeks, even if you ordered Git to destroy the branch containing it. The trouble is finding the appropriate hash. You could look at all the hash values in `.git/objects` and use trial and error to find the one you want. But there's a much easier way.
de: Standardmäßig behält Git einen 'Commit' für mindesten zwei Wochen, sogar wenn Du Git anweist den 'Branch' zu zerstören, in dem er enthalten ist. Das Problem ist, den entsprechenden SHA1-Wert zu finden. Du kannst Dir alle SHA1-Werte in `.git/objects` vornehmen und ausprobieren ob Du den gesuchten 'Commit' findest. Aber es gibt einen viel einfacheren Weg.

note: type: Plain text
en: Git records every hash of a commit it computes in `.git/logs`. The subdirectory `refs` contains the history of all activity on all branches, while the file `HEAD` shows every hash value it has ever taken. The latter can be used to find hashes of commits on branches that have been accidentally lopped off.
de: Git speichert jeden errechneten SHA1-Wert eines 'Commits' in `.git/logs`. Das Unterverzeichnis `refs` enthält den Verlauf aller Aktivitäten auf allen 'Branches', während `HEAD` alle SHA1-Werte enthält, die jemals diese Bezeichnung hatten. Die letztere kann verwendet werden um SHA1-Werte von 'Commits' zu finden, die sich in einem 'Branch' befanden, der versehentlich gestutzt wurde.

note: type: Plain text
en: The reflog command provides a friendly interface to these log files. Try
de: Die reflog Anweisung bietet eine benutzerfreundliche Schnittstelle zu diesen Logdateien. Versuche

note: type: Plain text
en: Instead of cutting and pasting hashes from the reflog, try:
de: Anstatt SHA1-Werte aus dem reflog zu kopieren und einzufügen, versuche:

note: type: Plain text
en: Or checkout the 5th-last visited commit via:
de: Oder rufe den fünftletzten 'Commit' ab, mit:

note: type: Plain text
en: See the ``Specifying Revisions'' section of *git help rev-parse* for more.
de: Siehe in der ``Specifying Revisions'' Sektion von *git help rev-parse* für mehr.

note: type: Plain text
en: You may wish to configure a longer grace period for doomed commits. For example:
de: Vielleicht möchtest Du eine längere Gnadenfrist für todgeweihte 'Commits' konfigurieren. Zum Beispiel:

note: type: Plain text
en: means a deleted commit will only be permanently lost once 30 days have passed and *git gc* is run.
de: bedeutet, ein gelöschter 'Commit' wird nur dann endgültig verloren sein, nachdem 30 Tage vergangen sind und *git gc* ausgeführt wurde.

note: type: Plain text
en: You may also wish to disable automatic invocations of *git gc*:
de: Du magst vielleicht auch das automatische Ausführen von *git gc* abstellen:

note: type: Plain text
en: in which case commits will only be deleted when you run *git gc* manually.
de: wodurch 'Commits' nur noch gelöscht werden, wenn Du *git gc* manuell aufrufst.

note: type: Plain text
en: === Building On Git ===
de: === Auf Git bauen ===

note: type: Plain text
en: In true UNIX fashion, Git's design allows it to be easily used as a low-level component of other programs, such as GUI and web interfaces, alternative command-line interfaces, patch managements tools, importing and conversion tools and so on. In fact, some Git commands are themselves scripts standing on the shoulders of giants. With a little tinkering, you can customize Git to suit your preferences.
de: In echter UNIX Sitte erlaubt es Git's Design, dass es auf einfache Weise als Low-Level-Komponente von anderen Programmen benutzt werden kann, wie zum Beispiel grafischen Benutzeroberflächen und Internetanwendungen, alternative Kommandozeilenanwendungen, Patch-Werkzeugen, Import- und Konvertierungswerkzeugen und so weiter. Sogar einige Git Anweisungen selbst sind nur winzige Skripte, wie Zwerge auf den Schultern von Riesen. Mit ein bisschen Handarbeit kannst Du Git anpassen, damit es Deinen Anforderungen entspricht.

note: type: Plain text
en: One easy trick is to use built-in Git aliases to shorten your most frequently used commands:
de: Ein einfacher Trick ist es die in Git integrierte Aliasfunktion zu verwenden um die am häufigsten benutzten Anweisungen zu verkürzen:

note: type: Plain text
en: Another is to print the current branch in the prompt, or window title.  Invoking
de: Etwas anderes ist der aktuelle 'Branch' im Prompt oder Fenstertitel. Die Anweisung

note: type: Plain text
en: shows the current branch name. In practice, you most likely want to remove the "refs/heads/" and ignore errors:
de: zeigt den Namen des aktuellen 'Branch'. In der Praxis möchtest Du aber das "refs/heads/" entfernen und Fehler ignorieren:

note: type: Plain text
en: The +contrib+ subdirectory is a treasure trove of tools built on Git.  In time, some of them may be promoted to official commands. On Debian and Ubuntu, this directory lives at +/usr/share/doc/git-core/contrib+.
de: Das +contrib+ Unterverzeichnis ist eine Fundgrube von Werkzeugen, die auf Git aufbauen. Mit der Zeit können einige davon zu offiziellen Anweisungen befördert werden. Auf Debian und Ubuntu, findet man dieses Verzeichnis unter +/usr/share/doc/git-core/contrib+.

note: type: Plain text
en: One popular resident is +workdir/git-new-workdir+. Via clever symlinking, this script creates a new working directory whose history is shared with the original repository:
de: Ein beliebter Vertreter ist +workdir/git-new-workdir+. Durch cleveres verlinken erzeugt dieses Skript ein neues Arbeitsverzeichis, das seine Versionsgeschichte mit dem original 'Repository' teilt:

note: type: Plain text
en:   $ git-new-workdir an/existing/repo new/directory
de:   $ git-new-workdir ein/existierendes/repo neues/verzeichnis

note: type: Plain text
en: The new directory and the files within can be thought of as a clone, except since the history is shared, the two trees automatically stay in sync. There's no need to merge, push, or pull.
de: Das neue Verzeichnis und die Dateien darin kann man sich als 'Clone' vorstellen, mit dem Unterschied, dass durch die gemeinschaftliche Versionsgeschichte die beiden Versionen automatisch synchron bleiben. Eine Synchronisierung mittels 'merge', 'push' oder 'pull' ist nicht notwendig.

note: type: Plain text
en: === Daring Stunts ===
de: === Gewagte Kunststücke ===

note: type: Plain text
en: These days, Git makes it difficult for the user to accidentally destroy data.  But if you know what you are doing, you can override safeguards for common commands.
de: Heutzutage macht es Git dem Anwender schwer versehentlich Daten zu zerstören. Aber, wenn man weiß was man tut, kann man die Schutzmaßnahmen der häufigsten Anweisungen umgehen.

note: type: Plain text
en: *Checkout*: Uncommitted changes cause checkout to fail. To destroy your changes, and checkout a given commit anyway, use the force flag:
de: *Checkout*: Nicht versionierte Änderungen lassen 'checkout' scheitern. Um trotzdem die Änderungen zu zerstören und einen vorhandenen 'Commit' abzurufen, benutzen wir die 'force' Option:

note: type: Plain text
en: On the other hand, if you specify particular paths for checkout, then there are no safety checks. The supplied paths are quietly overwritten. Take care if you use checkout in this manner.
de: Auf der anderen Seite, wenn Du einen speziellen Pfad für 'checkout' angibst, gibt es keinen Sicherheitsüberprüfungen mehr. Der angegebene Pfad wird stillschweigend überschrieben. Sei vorsichtig, wenn Du 'checkout' auf diese Weise benutzt.

note: type: Plain text
en: *Reset*: Reset also fails in the presence of uncommitted changes. To force it through, run:
de: *Reset*: Reset versagt auch, wenn unversionierte Änderungen vorliegen. Um es zu erzwingen, verwende:

note: type: Plain text
en: *Branch*: Deleting branches fails if this causes changes to be lost. To force a deletion, type:
de: *Branch*: 'Branches' zu löschen scheitert ebenfalls, wenn dadurch Änderungen verloren gehen. Um das Löschen zu erzwingen, gib ein:

note: type: Plain text
en: Similarly, attempting to overwrite a branch via a move fails if data loss would ensue. To force a branch move, type:
de: Ebenso scheitert der Versuch einen 'Branch' durch ein 'move' zu überschreiben, wenn das einen Datenverlust zur Folge hat. Um das Verschieben zu erzwingen, gib ein:

note: type: Plain text
en: Unlike checkout and reset, these two commands defer data destruction. The changes are still stored in the .git subdirectory, and can be retrieved by recovering the appropriate hash from `.git/logs` (see "HEAD-hunting" above).  By default, they will be kept for at least two weeks.
de: Anders als bei 'checkout' und 'reset' verschieben diese beiden Anweisungen das Zerstören der Daten. Die Änderungen bleiben im .git Unterverzeichnis gespeichert und können wieder hergestellt werden, wenn der entsprechende SHA1-Wert aus `.git/logs` ermittelt wird (siehe "KOPF-Jagd" oben). Standardmäßig bleiben die Daten mindestens zwei Wochen erhalten.

note: type: Plain text
en: *Clean*: Some git commands refuse to proceed because they're worried about
    clobbering untracked files. If you're certain that all untracked files and
    directories are expendable, then delete them mercilessly with:
de: *Clean*: Verschiedene git Anweisungen scheitern, weil sie Konflikte mit unversionierten Dateien vermuten. Wenn Du sicher bist, dass alle unversionierten Dateien und Verzeichnisse entbehrlich sind, dann lösche diese gnadenlos mit:

note: type: Plain text
en: Next time, that pesky command will work!
de: Beim nächsten Mal werden diese lästigen Anweisung gehorchen!

note: type: Plain text
en: === Preventing Bad Commits ===
de: === Verhindere schlechte 'Commits' ===

note: type: Plain text
en: Stupid mistakes pollute my repositories. Most frightening are missing files due to a forgotten *git add*. Lesser transgressions are trailing whitespace and unresolved merge conflicts: though harmless, I wish these never appeared on the public record.
de: Dumme Fehler verschmutzen meine 'Repositories'. Am schrecklichsten sind fehlende Dateien wegen eines vergessenen *git add*. Kleinere Verfehlungen sind Leerzeichen am Zeilenende und ungelöste 'merge'-Konflikte: obwohl sie harmlos sind, wünschte ich, sie würden nie in der Öffentlichkeit erscheinen.

note: type: Plain text
en: If only I had bought idiot insurance by using a _hook_ to alert me about these problems:
de: Wenn ich doch nur eine Trottelversicherung abgeschlossen hätte, durch Verwendung eines _hook_, der mich bei solchen Problemen alarmiert.

note: type: Plain text
en: Now Git aborts a commit if useless whitespace or unresolved merge conflicts are detected.
de: Nun bricht Git einen 'Commit' ab, wenn es überflüssige Leerzeichen am Zeilenende oder ungelöste 'merge'-Konflikte entdeckt.

note: type: Plain text
en: For this guide, I eventually added the following to the beginning of the *pre-commit* hook to guard against absent-mindedness:
de: Für diese Anleitung hätte ich vielleicht am Anfang des *pre-commit* 'hook' folgendes hinzugefügt, zum Schutz vor Zerstreutheit:

note: type: Plain text
en: Several git operations support hooks; see *git help hooks*. We activated the sample *post-update* hook earlier when discussing Git over HTTP. This runs whenever the head moves. The sample post-update script updates files Git needs for communication over Git-agnostic transports such as HTTP.
de: Viele Git Operationen unterstützen 'hooks'; siehe *git help hooks*. Wir haben den Beispiel 'hook' *post-update* aktiviert, weiter oben im Abschnitt Git über HTTP. Dieser läuft immer, wenn der 'HEAD' sich bewegt. Das Beispiel 'post-update' Skript aktualisiert Dateien, welche Git für die Kommunikation über 'Git-agnostic transports' wie z.B. HTTP benötigt.
