Mon git-svn flux de travail est typique:Pourquoi git-svn dcommit laisse-t-il des doubles dans mon repo git? Puis-je l'empêcher de faire ça?
git checkout -b story-xyz
git commit -a -m "work"
git commit -a -m "more work"
git checkout master
git svn fetch
git merge remotes/trunk
git checkout story-xyz
git rebase master (sometimes with -i)
git checkout master
git merge story-xyz
À ce stade, j'ai mes branches master
et story-xyz
pointant vers la même livraison, un ou plusieurs engage en avance sur remotes/trunk
. Tout depuis remotes/trunk
est dans une histoire linéaire.
last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]
Je lance alors
git svn dcommit
Je me attendais à voir les commits entre remotes/trunk
et master
deviennent des révisions Subversion, et se retrouver avec une seule histoire linéaire avec remotes/trunk
, master
et story-xyz
tout en montrant la dernière révision, comme ça:
last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk]
Mes révisions Subversion vont dans bien, mais je me retrouve avec une structure à deux branches. La racine commune de la branche est la tête de Subversion avant que je m'engage. Les deux branches contiennent la même série de commits, en ce sens qu'elles contiennent les mêmes différences. La branche story-xyz
est à la tête d'une branche, remotes/trunk
et master
à l'autre:
last svn commit <--- work <--- more work [master, remotes/trunk]
|
\- work <--- more work [story-xyz]
Le git engage que j'avais avant d'exécuter git svn dcommit
sont sur la branche inférieure (story-xyz
), avec mon git commit messages, git nom d'utilisateur et e-mail, et git commit horodateurs. Les validations sur la branche supérieure sont de nouveaux commit git. Ils utilisent mon nom d'utilisateur Subversion, l'horodatage lorsque j'ai exécuté le dcommit
et les messages de validation ont le champ git-svn-id
ajouté.
Tout est OK, et je peux continuer à travailler. Le problème est que je regarde dans gitk
et vois ce qui ressemble à une branche non fusionnée story-xyz
. Il est assez difficile de faire la différence entre une branche d'histoire que j'ai fusionnée en master
, et une autre que je n'ai pas. La manière la plus évidente de le repérer est le message de validation en double. Je pourrais supprimer la branche story-xyz
, mais j'ai l'impression de ne pas utiliser git correctement et j'ai perdu une partie de mon histoire.
Ai-je besoin de quelque chose qui empêcherait git-svn
de le faire? Ou est-ce juste une des façons d'interagir avec Subversion dilue le pouvoir et la liberté de git?
Merci, je vais essayer cela aujourd'hui.On dirait que cela supprimera complètement le besoin de maîtriser - alors pensez-vous que l'histoire des télécommandes/tronc est maintenant notre «ligne principale» de l'histoire? –
L'histoire des télécommandes/tronc est la «ligne principale» également dans votre cas. Regardez votre dernier graphique. L'histoire du maître est la même que l'histoire des télécommandes/troncs. Les deux sont également valables comme "ligne principale" - les télécommandes d'autant plus, parce que c'est la ligne principale _shared_. Vous n'avez pas à éliminer complètement le maître. Vous pouvez juste le laisser pendre à un moment plus tôt dans l'histoire. Ensuite, si vous devez faire, par exemple, un commit, vous pouvez checkout master et svn rebaser à ce jour. –
Oui, cela a du sens. Je suppose que j'étais trop attaché à l'idée que le «maître» soit si spécial que nous devions le garder à jour. Je n'ai pas encore eu l'occasion d'essayer votre flux de travail, mais si cela fonctionne comme prévu, j'accepterai la réponse. –