Git: Konflikte in Binärdateien auflösen
Zur Navigation springen
Zur Suche springen
Scenario
Eine Datei mit Binärdaten (abs.bin) wurde in Repository A bearbeitet und commitet und zum Stammrepo gepusht. Anschließend wurde die gleiche Datei auf Rechner B bearbeitet.
Beim git push stellt man jetzt fest, dass es einen Konflikt gibt.
Updating .... error: Entry xyz.bin not uptodate.
Lösung
# Änderungen von Rechner B sichern: git commit -m "Sicherung der Konfliktdatei abc.bin" abc.bin # auf irgendeine Weise die Datei abc.bin in ein Textformat bringen: # als Beispiel nehmen wir an, es existiere ein Tool namens bin2txt, dann # bin2txt abc.bin abc.rechner_b.txt # Den Versionsstand des Stammrepos herstellen git checkout remotes/origin/master # abc.bin in ein Textformat bringen # bin2txt abc.bin abc.stammrepo.txt # in einem recovery Zweig die Daten zusammenführen git checkout -b master_recovery # Änderungen anzeigen und einarbeiten kdiff3 -o abc.combined.txt abc.rechner_b.txt abc.combined.txt # Textdatei wieder umwandeln in Binärdatei # txt2bin abc.combined.txt abc.bin # kombinierte Datei einchecken im master_recovery branch git commit -m "Daten aus Konflikt zusammenfuehren" abc.bin # den alten master Zweig durch den master_recovery-Zweig ersetzen git branch -M master_recovery master git checkout master # jetzt haben wir wieder eine lineare history git push
einfachere Alternative
Wenn wir einfach nur eine Version behalten wollen, hier als Beispiel die in Rechner B. Achtung: dies verwirft sämtliche sonstigen Änderungen, die bisher auf Rechner B nach Divergenz vom Stammrepo getätigt wurden.
mv abc.bin abc.new.bin git checkout remotes/origin/master git checkout -b master_recovery mv abc.new.bin abc.bin git commit -m "abc.bin von Rechner B" abc.bin git branch -M master_recovery master git push