2009-07-29 5 views
2

Ich versuche, Code auf zwei Zweigen mit dem 'Git merge' Befehl zu kombinieren, aber Git stürzt während des Prozesses ab. Ich muss eine alternative Möglichkeit finden, diese Zweige zusammenzuführen.git segfaults auf merge - Submodulkonflikt

fusioniert Ausgabe in ein Debug-Level zu erhöhen Ich lief:

 
    $ export GIT_MERGE_VERBOSITY=5 

ich auf dem Zielzweig zur Zeit bin. Git-Status zeigt alles sauber und klar. Wenn ich die Zweige zusammenführe, sehe ich, was ich sehe (Ich habe Check-in-Kommentare mit %%%%%% und Dateinamen mit ####### ersetzt, da diese geschäftlich sensibel sind).

$ git merge origin/PH-RELEASE-146.0 
Merging HEAD with origin/PH-RELEASE-146.0 
Merging: 
8399d82 %%%%%% 
4f9dcfe %%%%%% 
found 2 common ancestor(s): 
e0a5fa1 %%%%%% 
ce62bf1 %%%%%% 
    Merging: 
    e0a5fa1 %%%%%% 
    ce62bf1 %%%%%% 
    found 1 common ancestor(s): 
    af34a07 %%%%%% 
    Skipped ######## (merged same as existing) 
    Removed ######## 
    Removed ######## 
    ... 
    Removed ######## 
    Auto-merged build 
    CONFLICT (submodule): Merge conflict in build - needs b3efae4855bc5eb83aa3167ce6c309a4503c3286 
    There are unmerged index entries: 
    1 build 
    2 build 
    3 build 
Merge with strategy recursive failed. 

Es stellt sich heraus, dass zu diesem Zeitpunkt git-merge abgestürzt ist. Woher weiß ich das? - beim Laufen git unter Cygwin:

$ git merge origin/PH-RELEASE-146.0 

    11 [main] git 4352 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) 

Segmentation fault (core dumped) 
  • wenn git unter Linux läuft, mit 'ulimit -c unlimited':
 
    $ ulimit -c unlimited; ls -l core; git merge origin/PH-RELEASE-146.0; ls -l core 
    ls: cannot access core: No such file or directory 
    Merging HEAD with origin/PH-RELEASE-146.0 
    ... 
    ... 
    Merge with strategy recursive failed. 
    -rw------- 1 user group 1589248 Jul 29 12:48 core 
  • in beiden Fällen .git/index.lock bleibt und müssen manuell gelöscht werden, bevor ein Git-Befehl wieder funktioniert:

    $ git status fatal: nicht in der Lage ‚.git/index.lock‘ zu erstellen: Die Datei existiert

ich manuell durch die Zusammenführung oben gegangen sind, indem sie die Commit-IDs mit den in der gitk Baum zu vergleichen. Es scheint mir klar zu sein, dass Git nach gemeinsamen Vorfahren sucht und die Verschmelzung in Stücke aufbricht, die rekursiv mit jedem Vorfahren umgehen. Aber was ich denke, ist das Problem verursacht wird, dass die „git-link“ zu Submodul namens „Build“ hat zwischen Commits e0a5fa1 und ce62bf1 geändert:

  • in e0a5fa1 Submodul Build soll sein 8dc84b6
  • So offensichtlich

b3efae4 werden gibt es einen Konflikt

  • in ce62bf1 Submodul bauen soll. Aber es ist ein Konflikt während der "partiellen" Zusammenführung oder wie auch immer es heißt, nicht der letzte. Und git scheint das überhaupt nicht gut zu handhaben.

    Ok, also gibt es wahrscheinlich einen Fehler - wie würde ich einen Fehlerbericht einreichen?

    Aber was mich wirklich interessiert, ist die Tatsache, dass ich diese zwei Zweige nicht zusammenführen kann. Kennt jemand eine alternative Möglichkeit, diese Zweige zusammen zu bringen, ohne den Befehl 'Zusammenführen' zu verwenden? Kann ich 'git-merge' erhalten, um dieses Submodul während des gesamten Mergeprozesses vollständig zu ignorieren?

    Linux git Version 1.6.0.4

    Cygwin git Version 1.6.1.2

  • +0

    Sie könnten versuchen, das Submodul vor dem Zusammenführen aus jedem Zweig zu löschen und dann das Submodul nach dem Zusammenführen hinzuzufügen. –

    +0

    Ich habe das versucht, aber es funktioniert leider nicht, weil git durch den Commit-Verlauf zurück zu den sekundären Vorfahren geht, wo das Submodul existiert und nicht gelöscht werden kann. Ich löste dies am Ende durch Kirschen-Kommissionierung der Commits von einem Zweig auf den anderen, aber absichtlich überspringen alle Commits, die das Submodul aktualisiert. – meowsqueak

    +0

    Glücklicherweise werden unsere Submodule immer ohne weitere Änderungen im Commit aktualisiert! Nachdem ich das getan hatte, konnte ich "git merge -s resolve origin/PH-RELEASE-146.0" verwenden, um die beiden Zweige zusammenzuführen (der einzige Unterschied im Merge-Commit war das fehlende Submodul) und später das Submodul hinzufügen zurück in. – meowsqueak

    Antwort

    1

    Versuchen Upgrade git auf Linux, 1.6.3.3 ist die neueste, wenn das nicht versuchen Idee William hilft.

    +0

    Ja, ich kann bestätigen, dass 1.6.3.3 dieses Problem nicht aufweist. Die Zusammenführung identifiziert einen Konflikt mit dem Submodul korrekt, aber statt es ordnungsgemäß abzustürzen, wird die Zusammenführung fortgesetzt und andere Dateien zum Index hinzugefügt. – meowsqueak