Fondamentalement, quand je veux commettre deux changements séparés dans le même fichier qui résultent d'une opération git add --patch <file>
, git svn rebase lance plus tard 1-2 conflits en validant le second changez en utilisant git add
pour le deuxième changement.Problème de git-svn avec git add --patch entraînant des conflits
donc je fais essentiellement ceci (je suis sur la branche principale et avoir récupéré le dépôt svn):
git checkout -b feature
... make two unrelated changes to file test.txt...
git add --patch test.txt
... add first change but ignore second one
git commit -m "change1"
git stash
git checkout master
git merge feature
git svn rebase
git svn dcommit
git checkout feature
git stash apply
maintenant ici il y a deux façons de le faire, d'abord celui qui fonctionne:
git add --patch test.txt
... select everything (which is the second change in this case)
git commit -m "change 2"
git checkout master
git merge feature
git svn rebase
git svn dcommit
est ici celui qui ne fonctionne pas:
git add test.txt #notice there's no --patch
git commit -m "change 2"
git checkout master
git merge feature
git svn rebase #yields a conflict
Alors, pourquoi est-ce que lors de l'utilisation git add --patch
pour le deuxième changement, je peux commettre au dépôt svn sans problèmes, mais en utilisant simplement git add
pour le deuxième changement, il en résulte un conflit? Je suis assez nouveau à git, donc c'est peut-être une question stupide, mais comme je le vois, les deux sets de commandes devraient faire exactement la même chose.
http://andy.delcambre.com/2008/03/04/git-svn-workflow.html J'ai suivi ce tutoriel (je suis assez nouveau pour git) et il dit qu'il est pas recommandé de travailler sur la branche maîtresse. Je l'ai essayé sur master (pas exactement comme tu veux, car je veux être deux rebase/dcommit à svn) et ça a marché sans problème. Cela vous dérangerait-il d'expliquer la différence entre une fusion svn et git, ce serait grandement apprécié? – Zenon
@Zenon: je ne comprends pas votre »je veux être deux rebase/dcommit à svn«? peux-tu élaborer? – knittl
oh je voulais dire que j'ai fait le premier changement -> svn rebase & svn dcommit, puis j'ai caché le 2ème changement et svn rebase & svn dcommit à nouveau. J'ai essentiellement fait le tout comme une sorte de preuve de concept. Par exemple, je travaille sur une branche dans git pour ajouter de nouveaux trucs et juste pour les supprimer, certains des changements n'étant pas liés. Plus tard, je veux vérifier l'une des choses que j'ai ajoutées à master et ensuite à svn, puis continuer à travailler sur les autres changements dans la branche git et les soumettre plus tard quand ils ont terminé. De cette façon, vous n'aurez pas à vous soucier du contrôle de la source lors du codage. – Zenon