Was Sie wahrscheinlich getan haben, um dies zu verursachen:
So etwas passiert, wenn Sie ein kleines Programm herausholen. Du bist dabei, etwas zu ändern, das bereits funktioniert hat, also sprichst du deinen Level-3-Zauber der fortwährenden Rückgängigmachung:
machine1:~/proj1> git init
und Sie beginnen mit dem Hinzufügen / Festschreiben. Aber dann wird das Projekt immer engagierter und Sie möchten von einem anderen Computer (wie Ihrem Heim-PC oder Laptop) aus daran arbeiten, also machen Sie so etwas
machine2:~> git clone ssh://machine1/~/proj1
und es klont und alles sieht gut aus, und so arbeiten Sie an Ihrem Code von machine2.
Dann ... versuchen Sie, Ihre Commits von machine2 zu übertragen, und Sie erhalten die Warnmeldung im Titel.
Der Grund für diese Nachricht ist, dass das Git-Repo, aus dem Sie gezogen haben, nur für diesen Ordner auf Maschine1 verwendet werden sollte. Sie können ganz gut davon klonen , aber das Drücken kann Probleme verursachen. Die "richtige" Art, den Code an zwei verschiedenen Orten zu verwalten, ist ein "nacktes" Repo, wie vorgeschlagen wurde. Eine nackte Repo ist keine Arbeit entwickelt haben getan in es ist gemeint , die Commits aus mehreren Quellen zu koordinieren. Aus diesem Grund schlägt die am besten bewertete Antwort vor, alle Dateien / Ordner außer dem .git-Ordner nach Ihnen zu löschengit config --bool core.bare true
.
Klärung der am besten bewerteten Antwort: Viele der Kommentare zu dieser Antwort lauten etwa "Ich habe die Nicht-Git-Dateien nicht von Maschine1 gelöscht und konnte sie immer noch von Maschine2 festschreiben". Das stimmt. Diese anderen Dateien sind jedoch jetzt vollständig vom Git-Repo "getrennt". Versuchen Sie es git status
dort und Sie sollten etwas wie "fatal: Dieser Vorgang muss in einem Arbeitsbaum ausgeführt werden" sehen. Der Vorschlag, die Dateien zu löschen, ist also nicht so, dass das Festschreiben von machine2 funktioniert . Es ist so, dass Sie nicht verwirrt werden und denken, dass Git diese Dateien immer noch verfolgt. Das Löschen der Dateien ist jedoch ein Problem, wenn Sie dennoch an den Dateien auf Maschine1 arbeiten möchten, nicht wahr?
Also, was solltest du wirklich tun?
Hängt davon ab, wie viel Sie noch an Maschine1 und Maschine2 arbeiten möchten ...
Wenn Sie mit der Entwicklung von Maschine1 fertig sind und Ihre gesamte Entwicklung auf Maschine2 verschoben haben, tun Sie einfach, was die am besten bewertete Antwort vorschlägt: git config --bool core.bare true
Löschen Sie dann optional alle Dateien / Ordner außer .git aus diesem Ordner, da diese sind nicht verfolgt und verursachen wahrscheinlich Verwirrung.
Wenn Ihre Arbeit an machine2 nur eine einmalige Sache war und Sie dort nicht weiterentwickeln müssen ... dann machen Sie sich nicht die Mühe, ein nacktes Repo zu machen. nur ftp / rsync / scp / etc. Ihre Dateien von Maschine * 2 * über die Dateien auf Maschine * 1 *, Commit / Push von Maschine * 1 * und Löschen der Dateien von Maschine * 2 *. Andere haben vorgeschlagen, einen Zweig zu erstellen, aber ich denke, das ist etwas chaotisch, wenn Sie nur eine Entwicklung zusammenführen möchten, die Sie einmalig von einem anderen Computer aus durchgeführt haben.
Wenn Sie die Entwicklung sowohl auf Maschine1 als auch auf Maschine2 fortsetzen möchten , müssen Sie die Dinge richtig einrichten. Sie müssen Ihr Repo in ein Bare konvertieren und dann einen Klon davon auf Maschine1 erstellen, damit Sie darin arbeiten können . Der wahrscheinlich schnellste Weg, dies zu tun, ist dies
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Sehr wichtig: Da Sie den Speicherort des Repos von proj1 nach proj1.git verschoben haben, müssen Sie dies in der .git / config-Datei auf machine2 aktualisieren . Danach können Sie Ihre Änderungen von machine2 aus festschreiben. Zuletzt versuche ich, meine nackten Repos an einem zentralen Ort fern von meinen Arbeitsbäumen zu halten (dh 'proj1.git' nicht im selben übergeordneten Ordner wie 'proj1' ablegen). Ich rate Ihnen, dies ebenfalls zu tun, aber ich wollte die obigen Schritte so einfach wie möglich halten.