Git : Gestion des branches dans Xcode

Bonjour,

Je viens de terminer le cours Git et j’expérimente avec Xcode.

J’ai une difficulté lorsque je teste le merge.
Voici ce que j’ai fait :

  • A partir d’un nouveau projet, j’initialise Git pour ce dossier.
    Dans Xcode :
  • Je crée une branche « branch-1 » et je positionne le HEAD dessus
  • Je mets un label dans le storyboard.
  • Je fais un commit pour cette modification
  • Je positionne le HEAD sur « master »
  • Je mets un label dans le storyboard.
  • je fais un commit pour cette modification.
  • en fonction du HEAD choisi, le run correspond parfaitement.
  • PROBLEME : lorsque je demande le merge de « branch-1 » vers « master », il m’indique qu’il y a un conflit dans le storyboard et me demande de choisir le bon fichier sans possibilité de fusionner !!!

Il y a-t-il une étape qui me manque ?

Comment dans ce cas gérer les versions ?

  • une version en production (master)
  • une branche de développement
  • une correction de bug dans la version production
  • puis fusion de la branche de developpement pour devenir la nouvelle version en production (master)

Comment faire cela ? ( dans Xcode ? autre gestionnaire Git ? )
Doit-on avoir une branche par version ( qu’elle soit en prod ou en développement ) ?
Comment propage-t-on les corrections de bug ?

Merci pour vos suggestions.

PS: après un nouvel essai en reprenant avec un nouveau projet cela fonctionne.
Comment être sûr du bon enchaînement des commit, checkout, merge, … ?

Bonjour Gilles,

en fait le problème ici ne vient pas de toi mais de la façon dont sont gérés les Storyboards.
C’est d’ailleurs un des reproches les plus courant sur les storyboards (qui devraient disparaître une fois que SwiftUI sera vraiment démocratisé).
Le problème c’est que tu as fait plusieurs changements en parallèles sur le même fichier et à la même ligne de code.
Tu as ce qu’on appelle un conflit : Git ne veut pas choisir à ta place quelle motif prendre (le label de la v1, celui de la v2 ou les 2). Puisque tu as le cours sur Git je te conseille de regarder cette vidéo : https://www.purplegiraffe.fr/courses/320049/lectures/4916772
Elle montre comment indiquer à Git comment fusionner des changements qu’il ne parvient pas à fusionner lui même.
Le soucis principal c’est que de grandes quantités de XML sont générées par Xcode à chaque fois que tu fais une modification dans un Storyboard.
Donc les conflits sont fréquents sur ces fichiers et en plus c’est difficile de les résoudre soi-même car tu ne sauras pas exactement quoi garder entre les versions.
Mon conseil pour les storyboards est d’éviter de les laisser diverger dans des branches au maximum

Merci Maxime pour cette précision.
Comment fais tu alors pour la gestion des versions ?
Fais-tu un cherry pick régulièrement pour monter les modifications du Master vers les branches ?
Tu utilises les branches très ponctuellement et les versions correspondent à un commit sur le Master, est-ce cela ?

Comme je te le disais :

Je travaille tout seul donc j’ai rarement besoin d’avoir des branches qui divergent trop. Pour les fichiers générés comme les storyboards j’évite tout écart.
La bonne nouvelle c’est qu’avec SwiftUI on va pouvoir abandonner les storyboards dans les années à venir :slight_smile: