2010-01-05 6 views
47

Es gibt 2 Mitglieder in unserem Team. Wir verwenden Xcode SCM (SVN verwenden), um unsere Quellcode-Dateien zu verwalten. Wir fügen alle Dateien zu unserem Xcode-Projekt hinzu. Er hat sich an den Server svn gebunden. Wenn ich updaten, finde Xcode, dass es Konflikte in der Datei project.pbxproj gibt. Dann wähle ich Quit Xcode und führe die Konflikte manuell zusammen. Dann fange ich an, meine project.pbxproj zu bearbeiten, füge unsere Änderungen hinzu. Eigentlich verstehe ich nicht, wie Xcode Dateien verwaltet, ich füge einfach etwas Text hinzu, den meine project.pbxproj Datei nicht hatte. Wenn ich fertig bin, kann mein Projekt nicht geöffnet werden. Ich denke, dass die project.pbxproj-Datei nicht manuell bearbeitet werden kann.Wie verschmelzen Konflikte (Datei project.pbxproj) in Xcode verwenden svn?

Also, ich möchte wissen, wenn Sie dieses Problem finden, die Projekt.pbxproj Datei Konflikte haben, wie man es löst?

Vielen Dank!

Antwort

17

Leider können Sie nicht viel tun, außer dass Sie die Änderungen manuell in einem Auschecken vornehmen und dann das neu "zusammengeführte" Projekt einchecken.

+1

Nach einer Stunde Zeit, um eine magische Lösung zu finden. Dies scheint die einzig akzeptable Antwort für mich zu sein. –

-20

Das Beste, was einfach zu tun sein könnte entweder Ihre Version oder seine Version in vollem Umfang zu übernehmen, ohne zu versuchen, beides zu verbinden. Überlegen Sie auch, ob die fragliche Datei überhaupt im Repository enthalten sein sollte. Es mag angemessener sein, jede Person ihre eigene Version davon haben zu lassen.

Überprüfen Sie die documentation zur Konfliktlösung.

+0

Dies. Die .pbxproj-Dateien sind ziemlich einfache (wenn ausführliche) Dateien, und die übliche Verschmelzungstechnik funktioniert im Allgemeinen gut, solange Sie geduldig sind. –

+13

'project.pbxproj' ist eine wichtige Datei, die Sie in Ihr Repository einfügen müssen, da es Xcode mitteilt, wie das Projekt erstellt wird. Nicht einchecken ist gleichbedeutend mit dem Einchecken von 'Makefile'. –

+4

Diese Antwort ist in gefährlicher Weise fehlerhaft. Akzeptiere nicht nur das eine oder das andere oder dein Projekt wird Dateien verpassen. Und ja, es sollte im Repository sein, sonst wird jeder das Projekt mit unterschiedlichen Ergebnissen unterschiedlich aufbauen. – DougW

114

Ich benutze Git, aber wir sehen das gleiche Problem - wenn zwei Leute Dateien hinzufügen, gibt es einen Zusammenführungskonflikt.

Normalerweise ist die Bearbeitung jedoch sehr einfach. Gehen Sie einfach in die project.pbxproj Datei mit einem Texteditor, und suchen Sie nach der Zusammenführung Konflikt Abschnitt - in der Regel ist dies gekennzeichnet durch so etwas wie:

>>>>>>> 
Stuff 1 
====== 
Stuff 2 
<<<<<<<< 

In 99% der Xcode-Projekt verschmelzen Konfliktfällen, Sie wollen einfach akzeptieren beide Seiten der merge (weil zwei Menschen unterschiedliche Dateien hinzugefügt) - so würden Sie einfach die merge Marker, im obigen Fall löschen, wie würde am Ende:

Stuff 1 
Stuff 2 

wie ich schon sagte, das funktioniert großartig in MOST Fälle. Wenn Xcode die Projektdatei nicht lesen kann, wenn Sie fertig sind, nehmen Sie einfach die neueste nicht zusammengeführte Version und fügen Sie Ihre Dateien manuell erneut hinzu.

+1

Eine weitere Antwort auf eine sehr ähnliche Frage, die sich damit beschäftigt, die pbxproj-Datei als Binärdatei zu behandeln: http://stackoverflow.com/questions/1549578/git-and-pbxproj/1549590#1549590 –

+3

Sie sind tot falsch. Warum sollte ein Textformat für ein automatisiertes System schwerer zu verschmelzen sein als der Code selbst? Das macht keinen Sinn. Ich arbeite seit vielen Jahren täglich mit anderen Leuten an XCode-Projekten zusammen, jedes Mal, wenn ich die obige Merge-Strategie anwende (obwohl ich diesen Tagen nur ein Merge-Tool erzähle, um beide Seiten eines Konflikts zu akzeptieren). Dieser Ansatz funktioniert gut. Jetzt Storyboards, da muss ich mehr experimentieren, bevor ich behaupten würde, dass das funktioniert. –

+2

Dies würde zumindest für xcode 5 nicht funktionieren. Scheint einige magische Zahlen zu verwenden und sie für alle Ressourcen neu zu generieren, wenn etwas zum Projekt hinzugefügt wird. Wenn ein Konflikt auftritt, sollten Sie beide in Konflikt stehenden Ressourcen entfernen und sie manuell hinzufügen, damit xcode diese magischen Zahlen erneut generieren kann. –

1

Manchmal können eine oder einige Dateien (z. B. ManagedObjects) in verschiedenen Zweigen neu erstellt werden. Bei der Zusammenführung können also zwei Deklarationen für eine Datei in einem Block vorhanden sein. In diesem Fall sollten Sie eine der Deklarationen löschen.

3

Ich war für eine einfache Lösung für dieses Problem suchen, wenn ich auf diese andere Frage/Antwort kam:

https://stackoverflow.com/a/14180388/307217

ich durch, wie einfach diese Lösung völlig weggeblasen war, ich versuchte, zu fusionieren in einem disparaten Feature-Zweig, der fast 200 Revisionen hinter dem Kofferraum hatte, waren XCode und Mercurial keine fröhlichen Camper darüber. Ich habe versucht, die pbxproj-Datei (die über 100 Konflikte hatte) manuell 8 Mal zusammenführen, bevor Sie diese Lösung versuchen.

Grundsätzlich ist die Lösung als solche (Sie Mercurial verwenden unter der Annahme, weil es genial ist):

hg update FEATURE_BRANCH 
hg merge default 
*mercurial gives you a ton of crap about the pbxproj file having merge conflicts* 
  • öffnen Xcode

  • Von:

    1. in Mercurial Versuchen Sie, Ihre merge obere Symbolleiste, wählen Sie Xcode-> Open Developer Tool-> FileMerge

    2. Auf der linken Seite, öffnen Sie Ihren Konflikt 'p roject.pbxproj‘Datei (die mit merge Konflikt Markup in it)
    3. Auf der rechten Seite, öffnen Sie Ihre 'project.pbxproj.orig'
    4. Wählen Sie File-> Save Merge und sparen Sie über die 'project.pbxproj' Datei
    5. Dann zurück in die Befehlszeile:

      hg resolve -m ProjectName.xcodeproj/project.pbxproj 
      *merge any other broken files* 
      hg commit -m "manually merged with trunk" 
      
    6. Kuchen essen, weil Sie
    7. Are Done
  • +0

    Dies stürzt Xcode 5 FileMerge in meinem Fall. –

    +0

    booo, gut funktioniert es in 4.6.3 .... :) –

    +1

    Stellt sich heraus Xcode 5 FileMerge stürzt auf fast alles ab. Großartige Arbeit, die es aus Apple heraus ... –

    0

    ich ein Tool "xUnique" gegründet https://github.com/truebit/xUnique, es funktioniert!

    +2

    Beachten Sie, dass [Link-only Antworten] (http (: //meta.stackoverflow.com/tags/link-only-answers/info) werden davon abgeraten, SO-Antworten sollten der Endpunkt einer Suche nach einer Lösung sein (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die dazu neigen, schal zu werden im Laufe der Zeit). Bitte beachten Sie, dass Sie hier eine eigenständige Zusammenfassung hinzufügen und den Link als Referenz beibehalten. – kleopatra

    2

    Diese Lösung ist nur für git, aber Sie können eine .gitattributes Datei zu Ihrem Projekt hinzufügen dann in dieser Datei die folgende Zeile:

    *.pbxproj merge=union

    Dieser git erzählen beide Seiten der Zusammenführung zu halten Das wird das sein, was du die meiste Zeit willst.

    1

    Wie oben häufigste Art und Weise angegeben die Konflikte der Handhabung ist zu

    1. "alles"
    2. Re-Import der Dateien in das
    3. Projekt akzeptieren

    ich ein Schrieb bash-script das kümmert sich um (1) oben.

    Beachten Sie, dass dies nur den häufigsten Fall von Zusammenführungskonflikten lösen wird!

    #!/bin/bash 
    # 
    # 
    # 
    if [ $# -eq 0 ] 
    then 
        echo "File must be provided as argument, darnit!" 
        exit 1 
    fi 
    
    if [ $# -eq 2 ] 
    then 
        echo "only ONE File must be provided as argument, darnit!" 
        exit 1 
    fi 
    
    
    echo "Will remove lines from file:" $1 
    grep -v "<<<<<" $1 | grep -v ">>>>>>" | grep -v "====" > out.tmp;mv out.tmp $1 
    echo "Done removing lines from file:" $1 
    
    Verwandte Themen