2009-04-10 8 views
32

Wenn ich ein git push tun, sehe ich folgendes:Was bedeutet git "Aktualisierung der aktuell ausgecheckten Verzweigung"?

warning: updating the currently checked out branch; this may cause confusion, 
as the index and working tree do not reflect changes that are now in HEAD. 

ich für diese Nachricht gegoogelt, und alles, was ich finden kann, ist ein git mailing list discussion wo die Autoren versuchen, genau zu entscheiden, wie diese Nachricht besser zu machen zu kommunizieren zu mir, was das eigentliche Problem ist.

Wie habe ich das verursacht und wie behebe ich es?

+2

mögliches Duplikat von [Git push error '\ [remote abgelehnt \] master -> master (Zweig ist gerade ausgecheckt)'] (http://stackoverflow.com/questions/2816369/git-push-error-remote -rejected-master-master-branch-is-current-checked) –

+1

@WilliamTate nein, dieser Beitrag behandelt eine Warnung, verlinkte Post behandelt Fehler – CharlesB

+2

Ja es ist, ich denke, es ist die Warnung, die Sie anstelle des Fehlers in der Vergangenheit erhielten Versionen von Git. –

Antwort

46

Dies passiert, wenn Sie auf einen nicht leeren Repo drängen. Ein leeres Repo ist ein Verzeichnis, das ausschließlich aus einem Verzeichnis .git besteht; Ein nicht-leeres Repo beinhaltet auch einen Checkout. Im Allgemeinen sollten Sie nicht zu einem nicht leeren Repo drängen; Tatsächlich wird dies in zukünftigen Versionen von Git verboten sein. Wenn Sie zu einem nicht leeren Repo wechseln, ist der HEAD dieses Repos nicht mehr mit dem Index und der Arbeitskopie synchronisiert.

Wenn Sie ein Repo erstellen, von Menschen zu schieben gehen zu wollen, dann sollten Sie es git init --bare mit erstellen (und git init --bare --shared, wenn mehrere Benutzerkonten Zugriff auf sie benötigen) oder git clone --bare, wenn Sie es sind die Schaffung von Klonen eines bestehenden Repo.

+1

Danke. Diese wichtige Warnung sagte mir, dass ich geklont worden war und zum falschen Repository gedrängt hatte !! Ich habe ein leeres Repository, ähnlich benannt in ein anderes Repository, das ich versehentlich geklont habe! – skiphoppy

+1

Ist es in Ordnung, von einem nicht-bare-Repository zu einem nicht-bare zu ziehen. Ich denke nicht? – Keyo

+1

@Keyo Ja, es ist in Ordnung, von einem nicht-leeren Repo zu einem anderen zu wechseln. Aber Sie sollten nicht in ein nicht-leeres Repo drängen. –

12

Kurz gesagt, Ihr Remote-Repository ist nicht länger ein leeres, und Sie drängen auf den Remote-Checkout-Zweig.

Siehe „How to publish a Git repository“:

Eine nackte Repository ist ein ohne in einer Arbeitskopie des Codes. Es enthält nur die Git-Datenbank.
Als allgemeine Regel sollten Sie niemals in ein Repository wechseln, das Änderungen in der Arbeitskopie enthält.
Um sicherzustellen, dass dies nicht den Fall, wir mit einem nackten Repository Server-Repository machen - es hat keine Arbeitskopie

Von here:

Beachten Sie, dass das Ziel eines „Push“ normal ist ein blankes Repository (dh ohne eigenen Arbeitsbaum).
Sie können auch zu einem Repository mit einem ausgecheckten Arbeitsbaum wechseln, aber der Arbeitsbaum wird nicht durch den Push aktualisiert.
Dies kann zu unerwarteten Ergebnissen führen, wenn die Verzweigung, an die Sie drücken, die aktuell ausgecheckte Verzweigung ist.

Wenn ein frei stehendes Arbeits Baum definiert ist (die beispielsweise auf einem Webserver DocumentRoot entsprechen kann), müssen Sie:

prüfen, auf dem Remote-Repository, der Wert von git config core.worktree und git config core.bare

+1

Hinweis zu sich selbst: siehe http://StackOverflow.com/Questions/2041823/2041865#2041865 für ein Beispiel für die Verwendung leerer Repos. – VonC

5

Ich habe mein Repository entkernt, indem ich ein neues, blankes Repository aus meinem vermasselten Repository geklont habe, um das Durcheinander für alle Fälle zu speichern und durch mein geklontes, nacktes zu ersetzen.

Ich bin neu in git, und als ich das Team aufstellte, vergaß ich die Option --bare. Danke für deine Hilfe!

Ich habe seit dem O'Reilly Git Buch gelesen und jetzt bin ein total git konvertieren.