Frage

Ich habe Git auf Windows (msysgit) wurden unter Verwendung von Änderungen für einige Design-Arbeit zu verfolgen, ich habe zu tun.

Heute habe ich an einem anderen PC arbeiten (mit Remote-Repo brian) und ich versuche jetzt die Änderungen heute auf meinem Laptop zurück in meine normale lokale Version fertig zu fusionieren.

Auf meinem Laptop habe ich git pull brian master verwendet, um die Änderungen in meiner lokale Version zu ziehen. Alles war gut, abgesehen von dem Haupt-InDesign-Dokument -. Dies zeigt als Konflikt

Die Version auf dem PC (brian) ist die neueste, die ich behalten wollen, aber ich weiß nicht, welche Befehle die repo sagt, diese zu verwenden.

Ich habe versucht, das Kopieren Sie die Datei direkt über auf meinem Laptop, aber dies scheint die ganze Mergeprozesses zu brechen.

Kann jemand mich in die richtige Richtung?

War es hilfreich?

Lösung

git checkout akzeptiert eine --ours oder --theirs Option für Fälle wie diesen. Also, wenn Sie einen Merge-Konflikt haben, und Sie wissen, dass Sie nur die Datei aus der Branche wollen Sie wachsen zusammen in, können Sie tun:

$ git checkout --theirs -- path/to/conflicted-file.txt

, dass die Version der Datei zu verwenden. Ebenso, wenn Sie wissen, dass Sie Ihre Version wollen (nicht das fusionierte wird) können Sie

$ git checkout --ours -- path/to/conflicted-file.txt

Andere Tipps

Sie haben den Konflikt manuell lösen (Kopieren die Datei über) und dann die Datei begehen (egal ob es über kopiert oder verwendet, um die lokale Version) wie folgt

git commit -a -m "Fix merge conflict in test.foo"

Git autocommits normalerweise nach dem Zusammenführen, aber wenn es Konflikte erkennt es nicht von selbst lösen kann, gilt es alle Patches es herausgefunden und lässt den Rest für Sie manuell lösen und zu begehen. Die Git Merge Man Seite , die Git-SVN Crash Course oder

Sie können auch dieses Problem lösen mit

git mergetool

, die bewirkt, dass git lokale Kopien des Konflikt binär erstellen und laichen Standard-Editor auf sie:

  • {conflicted}.HEAD
  • {conflicted}
  • {conflicted}.REMOTE

Natürlich kann man nicht sinnvoll Binärdateien Dateien in einem Texteditor bearbeiten. Stattdessen kopieren Sie die neue Datei {conflicted}.REMOTE über {conflicted} ohne den Editor zu schließen. Dann, wenn Sie den Editor git schließen tun werden sehen, dass die undecorated Arbeitskopie geändert wurde und Ihre merge Konflikt wird auf die übliche Art und Weise gelöst werden.

mipadi Antwort nicht ganz Arbeit für mich getan hat, musste ich dies tun:

  

git Kasse --ours path / to / file.bin

oder, um die Version zu behalten werden fusioniert:

  

git Kasse --theirs path / to / file.bin

dann

  

git add path / to / file.bin

Und dann konnte ich tun „git mergetool“ wieder und weiter auf den nächsten Konflikt.

Von der git checkout docs

  

git checkout [-f|--ours|--theirs|-m|--conflict=<style>] [<tree-ish>] [--] <paths>...

     

--ours
   --theirs
  Wenn Pfade aus dem Index Check-out, Check-out Phase # 2 (ours) oder # 3 (theirs) für unmerged Wege.

     

Der Index kann unmerged Einträge enthalten wegen einer früheren gescheiterten verschmelzen. Standardmäßig, wenn Sie versuchen, einen Eintrag so aus dem Index zu überprüfen, wird die Kasse Vorgang fehlschlagen und nichts wird ausgecheckt werden. Mit -f ignoriert diese unmerged Einträge. Der Inhalt von einer bestimmten Seite des merge kann durch Verwendung --ours oder --theirs aus dem Index überprüft werden. Mit -m, an die Arbeitsbaum-Datei vorgenommenen Änderungen können das ursprüngliche Konflikt merge Ergebnis neu erstellen verworfen werden.

Dieses Verfahren ist Binärdatei, Konflikte zu lösen, nachdem Sie eine Pull-Anforderung auf Github Erklärungen abgegeben haben:

  1. Also auf Github, gefunden Sie Ihre Pull-Anforderung einen Konflikt auf einer Binärdatei hat.
  2. Geben Sie nun auf den gleichen git Zweig auf dem lokalen Computer zurück.
  3. Sie (a) re-make / Re-build wieder diese Binärdatei, und (b) verpflichten, die zur Folge Binärdatei gleichen git Zweig.
  4. Dann drücken Sie das gleiche git branch wieder Github.

Auf Github, auf dem Pull-Anforderung sollte der Konflikt verschwinden.

ich auf ein ähnliches Problem kam (wollen ziehen eine Festschreibung, dass einige Binär-Dateien enthalten, die Konflikte verursacht, wenn fusionierte), aber über eine andere Lösung kam, die vollständig mit Git getan werden kann (dh mit nicht manuell Dateien über Kopieren zu) . Ich dachte, ich es hier enthalten würde so zumindest ich es das nächste Mal, wenn ich es brauche erinnern kann. :) Die Schritte wie folgt aussehen:

% git fetch

Dies holt die neueste (n) aus der Remote-Repository commit (Sie benötigen ein Remote-Zweignamen angeben, auf dem Setup abhängig), aber nicht versucht, sie zu verschmelzen. Es zeichnet die commit in FETCH_HEAD

% git checkout FETCH_HEAD stuff/to/update

Dies nimmt die Kopie der binären Dateien, die ich will und überschreibt, was mit der Version in der Arbeits Tree geholt von dem entfernten Zweig. git versucht keine Verschmelzung zu tun, so dass Sie nur mit einer exakten Kopie der Binärdatei von dem entfernten Zweig enden. Sobald das erledigt ist, können Sie die neue Kopie wie normale hinzufügen / begehen.

Ich habe für die Verwaltung von diff / merge von binären Dateien mit Git auf Windows über zwei Strategien kommen.

  1. Tortoisegit können Sie diff konfigurieren / Merge-Tools für verschiedene Dateitypen auf der Grundlage ihrer Dateierweiterungen. Siehe 2.35.4.3. Diff / Merge Erweiterte Einstellungen http://tortoisegit.org/docs/tortoisegit/tgit- Einbaum settings.html . Diese Strategie natürlich relys auf geeignete Diff / Merge-Tool zur Verfügung steht.

  2. Mit git Attribute Sie ein Tool / Befehl angeben können Ihre Binärdatei in Text und dann lassen Sie Ihr Standard-Diff / Merge-Tool zu tun, es ist Sache zu konvertieren. Siehe http://git-scm.com/book/it/ v2 / Customizing-Git-Git-Attribute . Der Artikel gibt auch ein Beispiel für die Verwendung von Metadaten zu diff Bildern.

Ich habe beiden Strategien mit binären Dateien von Softwaremodellen zu arbeiten, aber wir gingen mit Tortoisegit wie die Konfiguration war einfach.

Wenn das binäre ist etwas mehr als eine DLL oder etwas, das sein können bearbeitet direkt wie ein Bild oder eine Mischung Datei (und Sie müssen nicht in den Papierkorb / eine Datei oder das andere wählen) eine echte merge einige aussehen würde:

Ich schlage vor, für ein Diff-Tool, um orientierte suchen, was Sie binäre Datei, zum Beispiel gibt es einige kostenlosen Varianten für Bilddateien sind zum Beispiel

und vergleichen sie.

Wenn es kein Diff-Tool gibt es für Ihre Dateien zu vergleichen, dann, wenn Sie den Original-Generator der bin-Datei haben (das heißt, gibt es einen Editor für es ... wie Blender 3D, können Sie diese Dateien manuell überprüfen, auch die Protokolle und die andere Person fragen, was Sie sollten einschließen) und tun eine Ausgabe der Dateien mit https: // git -scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge

$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend

Ich verwende Git-Workflow für Excel - https: //www.xltrail. com / blog / git-Workflow-for-Excel Anwendung der meisten meiner binär-Dateien im Zusammenhang merge Probleme zu lösen. Diese Open-Source-App hilft mir, Probleme zu lösen produktiv ohne viel Zeit und lässt mich Kirsche die richtige Version der Datei ohne Verwirrung wählen.

mein Fall scheint ein Fehler .... mit git 2.21.0

ich einen Zug tat ... es beschwerten sich über binäre Dateien:

warning: Cannot merge binary files: <path>
Auto-merging <path>
CONFLICT (content): Merge conflict in <path>
Automatic merge failed; fix conflicts and then commit the result.

Und dann nichts in eine der Antworten hier führte in jeder Ausgabe, die keinen Sinn gemacht.

Wenn ich mir anschaue, welche Datei ich habe jetzt ... es ist die, die ich bearbeitet. Wenn ich entweder:

git checkout --theirs -- <path>
git checkout --ours -- <path>

Ich erhalte Ausgabe:

Updated 0 paths from the index

, und ich habe immer noch meine Version der Datei. Wenn ich rm und dann Kasse, es dauert 1 stattdessen sagen, aber es gibt immer noch mir meine Version der Datei.

git mergetool sagt

No files need merging

und git status sagt

    All conflicts fixed but you are still merging.
    (use "git commit" to conclude merge)

Eine Option ist, um rückgängig machen die commit ... aber ich hatte Pech und ich viele Commits hatte, und so schlimm war der erste. Ich möchte nicht, Zeit zu wiederholen, dass verschwenden.

so diesen Wahnsinn zu lösen:

Ich lief

git commit

, die verliert die Remote-Version, und wahrscheinlich verschwendet etwas Platz eine zusätzliche binäre Datei speichern ... dann

git checkout <commit where the remote version exists> <path>

das gibt mir die Remote-Version zurück

bearbeiten dann die Datei wieder ... und dann begehen und drücken, was wiederum bedeutet wahrscheinlich Raum der Binärdatei mit einer anderen Kopie zu verschwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top