iphone - Comment fusionner les conflits(fichier project.pbxproj) dans Xcode utiliser svn?




conflict (6)

Cette solution est seulement pour git, mais vous pouvez ajouter un fichier .gitattributes à votre projet puis dans ce fichier ajoutez la ligne suivante:

*.pbxproj merge=union

Cela va dire à Git de garder les deux côtés de la fusion qui sera ce que vous voulez la grande majorité du temps.

Il y a deux membres dans notre équipe. Nous utilisons SCM de Xcode (SVN) pour gérer nos fichiers de code source.
Nous ajoutons tous des fichiers à notre projet Xcode. Il s'est engagé sur le serveur SVN. Quand je mets à jour, Xcode trouve qu'il y a des conflits dans le fichier project.pbxproj . Ensuite, je sélectionne quitter Xcode et fusionner manuellement les conflits. Ensuite, je commence à éditer mon project.pbxproj , fusionner nos modifications. En fait, je ne sais pas comment Xcode gère les fichiers, je viens d'ajouter du texte que mon fichier project.pbxproj n'avait pas. Quand j'ai fini, mon projet ne peut pas s'ouvrir. Je suppose que parce que le fichier project.pbxproj ne peut pas être édité manuellement.

Donc, je veux savoir, quand vous trouvez ce problème, le fichier project.pbxproj ont des conflits, comment le résoudre?

Je vous remercie!


Comme indiqué ci-dessus, la façon la plus courante de gérer les conflits est de

  1. accepter "tout"
  2. réimporter les fichiers dans le projet

J'ai écrit un bash-script qui prend soin de (1) ci-dessus.

Notez que cela ne résoudra que le cas le plus courant des conflits de fusion!

#!/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

J'utilise git mais nous voyons le même problème - si deux personnes ajoutent des fichiers, il y a un conflit de fusion.

Habituellement, le montage est très facile. Rendez-vous simplement dans le fichier project.pbxproj avec un éditeur de texte, et cherchez la section de conflit de fusion - généralement ceci est marqué par quelque chose comme:

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

Dans 99% des cas de conflits de fusion de projets Xcode, vous voulez simplement accepter les deux côtés de la fusion (car deux personnes ont ajouté des fichiers différents). Vous supprimerez donc simplement les marqueurs de fusion, dans le cas ci-dessus.

Stuff 1
Stuff 2

Comme je l'ai dit, cela fonctionne très bien dans la plupart des cas. Si Xcode ne lit pas le fichier projet lorsque vous avez terminé, prenez simplement la version non fusionnée la plus récente et ajoutez manuellement vos fichiers.


Je cherchais une solution simple à ce problème quand je suis tombé sur cette autre question / réponse:

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

J'ai été complètement époustouflé par la simplicité de cette solution, j'essayais de fusionner dans une branche de fonctionnalité disparate qui comptait près de 200 révisions derrière le coffre, XCode et Mercurial n'étaient pas des campeurs heureux à ce sujet. J'ai essayé de fusionner manuellement le fichier pbxproj (qui avait plus de 100 conflits) 8 fois avant d'essayer cette solution.

Fondamentalement, la solution est en tant que telle (en supposant que vous utilisez Mercurial, parce que c'est génial):

  1. Essayez votre fusion dans mercurial:

    hg update FEATURE_BRANCH
    hg merge default
    *mercurial gives you a ton of crap about the pbxproj file having merge conflicts*
    
  2. Ouvrir Xcode

  3. Dans la barre d'outils supérieure, sélectionnez Xcode-> Ouvrir l'outil de développement-> FileMerge
  4. Sur la gauche, ouvrez votre fichier 'project.pbxproj' en conflit (celui avec le balisage de conflit de fusion)
  5. Sur le côté droit, ouvrez votre 'project.pbxproj.orig'
  6. Sélectionnez File-> Save Merge et sauvegardez sur le fichier 'project.pbxproj'
  7. Puis de retour à la ligne de commande:

    hg resolve -m ProjectName.xcodeproj/project.pbxproj
    *merge any other broken files*
    hg commit -m "manually merged with trunk"
    
  8. Mangez du gâteau parce que vous avez terminé

Malheureusement, il n'y a pas grand-chose que vous puissiez faire, sauf pour faire les changements manuellement dans un check-out et ensuite enregistrer le nouveau projet "fusionné".


Parfois, un ou quelques fichiers peuvent être recréés (par exemple ManagedObjects) dans différentes branches, alors quand vous allez fusionner, il peut y avoir deux déclarations pour un fichier dans un même bloc. Dans ce cas, vous devez supprimer l'une des déclarations.





conflict