2017-08-31 13 views
0

J'utilise 'git svn' pour cloner la source à partir de svn repository. Et utilisez une branche pour créer de nouvelles fonctionnalités. Le graphique du journal git commeMise à jour de ma branche git suivie des modifications du référentiel svn dans git-svn

S1-S2+S3-S4-S5-S6-S7 (master) 
    +B1-B2-...-B9 (new-feature) 

La nouvelle version svn est 'S7' et la dernière branche locale est 'B9'. Je veux que le graphique soit rebasées comme

S1-S2+S3-S4-S5-S6-S7+  (master) 
        +B2-B9 (new-feature) 

Mes commandes opération:

git checkout master 
git svn rebase  # it updated master to S7 
git checkout new-feature 
git rebase master 

Il va se produit de nombreux conflits d'espace, comme je sais que ce que B1, B3 ... B8 ont déjà enregistré svn par d'autres personnes. Y a-t-il une méthode plus intelligente pour me laisser garder mes patchs, ce qui n'est pas seulement un conflit spatial? Ici les B2, B9 ne sont que des exemples. En fait, je ne sais pas quels correctifs doivent être remplacés, fusionnés ou ignorés à l'avance. Je sais juste que certaines des vérifications svn sont en double avec certains correctifs de Bx.

Répondre

1

Vous devriez pouvoir faire git svn rebase sur votre branche new-feature, pas besoin de changer pour master iirc. En ce qui concerne l'abandon des commits B2-B9, vous pouvez e. g. faire git checkout -B new-feature B1 && git cherry-pick B9. Cela permettra de recréer la branche new-feature à partir de B1 et de sélectionner le commit B9. Ou vous faites un rebasage interactif comme git rebase -i B1, puis supprimez les lignes pour B2-B8 dans la liste des tâches et quittez l'éditeur. Ou vous pouvez faire un rebase non interactif comme git rebase --onto B1 B8 new-feature.

+0

J'ai édité ma question, le problème est que je ne sais pas quel correctif dois-je remplacer ou ignorer à l'avance. –

+0

Eh bien, ils ne sont pas ** dupliqués, sinon le commit serait vide sur rebase et donc automatiquement ignoré. Les espaces blancs différents ne sont pas des doublons. Alors, quand/comment voulez-vous déterminer/savoir quels commits sauter? Cela ne peut certainement pas être fait automatiquement s'il y a des différences. Git est un traqueur de contenu stupide. Les espaces peuvent être significatifs, donc Git devrait connaître le format du fichier pour "savoir" que la différence d'espace n'est pas significative. Et même si ce n'est pas techniquement significatif, cela pourrait être significatif pour un œil humain. – Vampire