git ready

Lerne Git Commit für Commit
von Nick Quaranto, Übersetzung von Nico Gulden

Push in ein Bare Repository

eingetragen am 01 Feb 2009

Typischerweise erlaubt dir Git, jede Art von Workflow aufzubauen. Anstatt zu sagen “du musst Git auf diese Art benutzen”, erlaubt dir Git herauszufinden, welcher Workflow für dich und deine Organisation am besten ist. Aber wie in jedem System gibt es Ecken und Ösen, die dieser Tip behandelt. Lass uns als Erstes ein paar Definitionen zu Grunde legen:

*Bare Repository": Ein Repository, das mit der --bare-Option geklont wurde. Es beinhaltet nur Dateien und Verzeichnisse im .git Verzeichnis.
*Non-Bare Repositry": Ein normaler Klon, der ein Arbeitsverzeichnis mit ausgecheckten Dateien besitzt.

Es gibt einen einfachen Weg, deine Änderungen mit Git zu teilen, aber manchmal möchtest du stattdessen Push und Pull gegenüber einem Repository ausführen. Wenn du deine Änderungen in ein Repository pushen möchtest, verwende nie ein non-bare Repository. Mit anderen Worten aus der Git FAQ zitiert:

A quick rule of thumb is to never push into a repository that has a work tree attached to it, until you know what you are doing.

Eine kurze Daumenregel lautet, nie in ein Repository zu pushen, das mit einer Arbeitskopie verknüpft ist, bis du weißt, was du tust.

Die Lektion besteht darin, dass wenn du Änderungen pushen möchtest, erstelle einen Bare Repository Klon mit git clone --bare. Ab diesem Punkt kannst du die Änderungen mit git daemon bereit stellen, so dass andere Nutzer darauf zugreifen können. Das Hauptziel von Git ist es, keine Daten zu verlieren. Aus diesem Grunde wurde es so gebaut, dass es mit dem Pushen in non-bare Repositories unglücklich ist.

Wenn du es dennoch aus irgendeinem Grund tun möchtest, gibt es Mechanismen, die dafür sorgen, dass du nicht versehentlich deine Daten verlierst. Sobald du in ein non-bare Repository gepusht hast, müsstest du deine Änderungen mit git reset --hard HEAD wegwerfen und mit git checkout -f deine gepushten Änderungen holen. Sogar wenn du etwas von deiner committeten Arbeit verloren hast, könntest du die Objekte mit git reflog aus Gits Datenspeicher wiederherstellen.

Jetzt, wo du über das Pushen in non-bare Repositories Bescheid weißt, wirst du hoffentlich den einfacheren Weg nehmen und einfach die Option --bare benutzen. Wenn du das aus irgendeinem Grund nicht möchtest, weißt du jetzt, wie du es umgehen kannst.