Ich habe Git unter Windows (msysgit) verwendet, um Änderungen für einige meiner Designarbeiten zu verfolgen.
Heute habe ich an einem anderen PC gearbeitet (mit Remote Repo brian
) und jetzt versuche ich, die heute vorgenommenen Änderungen wieder in meiner regulären lokalen Version auf meinem Laptop zusammenzuführen.
Auf meinem Laptop habe ich git pull brian master
die Änderungen in meine lokale Version übernommen. Bis auf das InDesign-Hauptdokument war alles in Ordnung - dies zeigt sich als Konflikt.
Die Version auf dem PC ( brian
) ist die neueste, die ich behalten möchte, aber ich weiß nicht, welche Befehle das Repo anweisen, diese zu verwenden.
Ich habe versucht, die Datei direkt auf meinen Laptop zu kopieren, aber dies scheint den gesamten Zusammenführungsprozess zu unterbrechen.
Kann mich jemand in die richtige Richtung weisen?
quelle
git checkout --ours
? Die Manpage schlägt vor (IMHO), dass checkout --ours / - Theirs die Änderung aus der Liste "beide geändert, müssen zusammengeführt werden" entfernt und zum Index hinzufügt, und ich denke, das ist nicht korrekt. Ich glaube, Sie müssengit add
nach der Kasse laufen .git merge branch_name
).--their
und--ours
vertauscht, dh --their == aktuell ausgecheckter Zweig und --ours ist der Zweig, normalerweise ein Remote-Zweig oder eine Pfadangabe, die Sie in den aktuellen zusammenführen möchten Ast. Die[space]--[space]
Option unterscheidet eindeutig von der Pfadspezifikation zwischen dem Zweignamen und der Pfadspezifikation, die beide zufällig mit demselben Namen existieren (z. B. ist ein vorhandener Zweigname "abc" und ein Verzeichnis namens "abc" vorhanden).Sie müssen den Konflikt manuell lösen (Kopieren der Datei) und dann die Datei festschreiben (unabhängig davon, ob Sie sie kopiert oder die lokale Version verwendet haben)
Git wird normalerweise nach dem Zusammenführen automatisch festgeschrieben. Wenn es jedoch Konflikte erkennt, die es nicht selbst lösen kann, wendet es alle Patches an, die es herausgefunden hat, und überlässt den Rest dem manuellen Auflösen und Festschreiben. Die Git Merge Man Page , der Git-SVN Crash Course oder dieser Blogeintrag geben möglicherweise Aufschluss darüber, wie es funktionieren soll.
Bearbeiten: Siehe den Beitrag unten, Sie müssen die Dateien nicht selbst kopieren, sondern können verwenden
um die Version der gewünschten Datei auszuwählen. Das Kopieren / Bearbeiten der Datei ist nur erforderlich, wenn Sie beide Versionen mischen möchten.
Bitte markieren Sie die Antwort von mipadis als die richtige.
quelle
Sie können dieses Problem auch mit überwinden
Dies führt
git
dazu, dass lokale Kopien der in Konflikt stehenden Binärdatei erstellt werden und Ihr Standardeditor darauf erscheint:{conflicted}.HEAD
{conflicted}
{conflicted}.REMOTE
Offensichtlich können Sie Binärdateien in einem Texteditor nicht sinnvoll bearbeiten. Stattdessen kopieren Sie die neue
{conflicted}.REMOTE
Datei,{conflicted}
ohne den Editor zu schließen. Wenn Sie dann schließengit
, sieht der Editor , dass die nicht dekorierte Arbeitskopie geändert wurde und Ihr Zusammenführungskonflikt auf die übliche Weise gelöst wird.quelle
Hit return to start merge resolution tool
") Strg + C drücken, und Git lässt die zusätzlichen Dateien an Ort und Stelle. Anschließend können Sie sie ändern oder in einem externen Tool zusammenführen (nützlich für binäre Dokumentformate wie LibreOffice / OpenOffice / MSWord) und das Ergebnis unter dem ursprünglichen Dateinamen speichern. Um git darüber zu informieren, dass der Konflikt gelöst ist, geben Siegit add
den ursprünglichen Dateinamen ein und Sie können das Zusammenführungs-Commit beenden.Um das Problem zu beheben, indem Sie die Version in Ihrem aktuellen Zweig behalten (ignorieren Sie die Version aus dem Zweig, in dem Sie zusammenführen), fügen Sie einfach die Datei hinzu und schreiben Sie sie fest:
Um das Problem zu lösen, indem Sie die Version in Ihrem aktuellen Zweig mit der Version aus dem Zweig überschreiben, in dem Sie zusammenführen, müssen Sie diese Version zuerst in Ihr Arbeitsverzeichnis abrufen und dann hinzufügen / festschreiben:
Ausführlicher erklärt
quelle
Mipadis Antwort hat bei mir nicht ganz funktioniert, ich musste das tun:
oder, um die zusammengeführte Version beizubehalten:
dann
Und dann konnte ich wieder "git mergetool" machen und mit dem nächsten Konflikt fortfahren.
quelle
Aus den
git checkout
Dokumentenquelle
Ich bin auf ein ähnliches Problem gestoßen (ich wollte ein Commit abrufen, das einige Binärdateien enthielt, die beim Zusammenführen Konflikte verursachten), bin aber auf eine andere Lösung gestoßen, die vollständig mit git durchgeführt werden kann (dh Dateien müssen nicht manuell kopiert werden). Ich dachte, ich würde es hier aufnehmen, damit ich mich zumindest daran erinnern kann, wenn ich es das nächste Mal brauche. :) Die Schritte sehen so aus:
Dadurch werden die neuesten Festschreibungen aus dem Remote-Repository abgerufen (je nach Einrichtung müssen Sie möglicherweise einen Namen für die Remote-Verzweigung angeben), es wird jedoch nicht versucht, diese zusammenzuführen. Es zeichnet das Commit in FETCH_HEAD auf
Dies nimmt die Kopie der gewünschten Binärdateien und überschreibt den Inhalt des Arbeitsbaums mit der Version, die aus dem Remote-Zweig abgerufen wurde. git versucht nicht, eine Zusammenführung durchzuführen, sodass Sie am Ende nur eine exakte Kopie der Binärdatei aus dem Remote-Zweig erhalten. Sobald dies erledigt ist, können Sie die neue Kopie wie gewohnt hinzufügen / festschreiben.
quelle
Mit diesem Verfahren werden Konflikte mit Binärdateien gelöst, nachdem Sie eine Pull-Anforderung an Github gesendet haben:
Auf Github sollte der Konflikt auf Ihre Pull-Anfrage hin verschwinden.
quelle
Wenn die Binärdatei mehr als eine DLL ist oder direkt bearbeitet werden kann wie ein Bild oder eine Mischdatei kann (und Sie die eine oder andere Datei nicht in den Papierkorb werfen / auswählen müssen), wäre eine echte Zusammenführung wie folgt:
Ich schlage vor, nach einem Diff-Tool zu suchen, das sich an Ihrer Binärdatei orientiert. Beispielsweise gibt es einige kostenlose Tools für Bilddateien
und vergleiche sie.
Wenn es kein Diff-Tool zum Vergleichen Ihrer Dateien gibt, haben Sie den Originalgenerator der Bin-Datei (dh es gibt einen Editor dafür ... wie bei Blender 3d können Sie diese Dateien auch manuell überprüfen Sehen Sie sich die Protokolle an und fragen Sie die andere Person, was Sie einschließen sollten. Führen Sie eine Ausgabe der Dateien mit https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge aus
$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend
quelle
Ich bin auf zwei Strategien gestoßen, um das Diff / Merge von Binärdateien mit Git unter Windows zu verwalten.
Mit Tortoise Git können Sie Diff / Merge-Tools für verschiedene Dateitypen basierend auf ihren Dateierweiterungen konfigurieren. Siehe 2.35.4.3. Erweiterte Diff / Merge-Einstellungen http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html . Diese Strategie setzt natürlich voraus, dass geeignete Diff / Merge-Tools verfügbar sind.
Mithilfe von Git-Attributen können Sie ein Tool / einen Befehl angeben, um Ihre Binärdatei in Text zu konvertieren, und dann Ihr Standard-Diff / Merge-Tool ausführen lassen. Siehe http://git-scm.com/book/it/v2/Customizing-Git-Git-Attributes . Der Artikel enthält sogar ein Beispiel für die Verwendung von Metadaten, um Bilder zu unterscheiden.
Ich habe beide Strategien, um mit Binärdateien von Softwaremodellen zu arbeiten, aber wir haben uns für Tortoise Git entschieden, da die Konfiguration einfach war.
quelle
Ich verwende Git Workflow für Excel - https://www.xltrail.com/blog/git-workflow-for-excel , um die meisten Probleme beim Zusammenführen von Binärdateien zu beheben. Diese Open-Source-App hilft mir, Probleme produktiv zu lösen, ohne zu viel Zeit zu investieren, und lässt mich ohne Verwirrung die richtige Version der Datei auswählen.
quelle
Mein Fall scheint ein Fehler zu sein ... mit Git 2.21.0
Ich habe einen Pull gemacht ... es hat sich über Binärdateien beschwert:
Und dann führte nichts in einer der Antworten hier zu einer Ausgabe, die irgendeinen Sinn ergab.
Wenn ich mir anschaue, welche Datei ich jetzt habe ... ist es die, die ich bearbeitet habe. Wenn ich es auch tue:
Ich bekomme Ausgabe:
und ich habe immer noch meine Version der Datei. Wenn ich rm und dann auschecke, wird stattdessen 1 angezeigt, aber es gibt mir immer noch meine Version der Datei.
Git Mergetool sagt
und Git Status sagt
Eine Möglichkeit besteht darin, das Commit rückgängig zu machen ... aber ich hatte Pech und hatte viele Commits, und dieses schlechte war das erste. Ich möchte keine Zeit damit verschwenden, das zu wiederholen.
um diesen Wahnsinn zu lösen:
Ich bin gerade gelaufen
Das verliert die Remote-Version und verschwendet wahrscheinlich etwas Speicherplatz für eine zusätzliche Binärdatei ... dann
Das gibt mir die Remote-Version zurück
dann die Datei erneut bearbeitet ... und dann festschreiben und pushen, was wiederum wahrscheinlich bedeutet, Speicherplatz mit einer anderen Kopie der Binärdatei zu verschwenden.
quelle
git checkout --ours <path>
habe ich nach dem Versuch erhaltenUpdated 0 paths from the index
. Ich habe das mitgit add <path>
Befehl behoben , der das gleiche tut.