J'ai une configuration de coffre où tout mon code de production va. P>
alors j'ai une branche code> de débogage code> (parent est enfin, j'ai une branche code> de la fonctionnalité code> (parent est Je veux juste savoir s'il y a un moyen plus facile de déplacer mon code code> code> du code code> code>. C'est ce que je fais actuellement: p>
coffre code>) que je ajoute du code de débogage tel que la journalisation, les vidages de var, etc., cela ne devrait jamais être en production . Cette branche change rarement. P>
débogage code>) où je fais tout mon codage avec les avantages du débogage. Il y a des engagements constants à cette branche. P>
Fonction Code> Branche LI>
maître code> et
git svn rebase code> changements d'autres devs. li>
rebase code> My
Branche code> sur la branche code> Master code> (
GIT REBASE --TOPLETO Fonction de débogage Master code>) < / li>
Fusionner code> fonction sur
maître code> li>
git svn dcommit code> modifications à d'autres devs li>
rebase code>
déboges code> à
maître code> (
Git Rebase Master Débog CODE>) LI>
Caractéristique Code> Branche Li>
code> à partir de la branche code> de débogage code>. li>
ol>
6 Réponses :
Nous avons une branche distincte pour chaque fonctionnalité ou correction de bug que nous faisons. Celles-ci peuvent ensuite être fusionnées dans le coffre quand elles ont été suffisamment testées. P>
Les branches peuvent être mises à jour si elles deviennent un peu anciennes. P>
Nous avons tendance à libérer des changements mineurs directement au coffre, mais pour des changements plus importants, nous les rassemblons dans une branche de candidature de libération dans laquelle nous fusionnons toutes les branches pertinentes contenant des modifications pour aller en direct. Cette nouvelle succursale peut être déployée et testée pour voir si la combinaison des changements rompt quoi que ce soit, avant qu'il ne soit enfin fusionné dans le coffre et entre en production. P>
Cette méthode crée beaucoup de branches, mais que nous nommons ces éléments liés à notre système de suivi des problèmes, ils sont faciles à suivre. Il est agréable d'inclure ou d'exclure toute modification à une libération. P>
espoir que cela aide p>
Ma question était plus spécifique et j'aime que vous intégrez la majeure partie de cela dans mon flux de travail actuel, mais pour la simplicité, j'ai décrit un exemple de base.
Je pense que ce que vous cherchez, c'est git-cerisier-choisir. Cela vous permet d'appliquer les engagements à partir de la fonctionnalité de maîtrise sans faire la danse de la Rebase que vous décrivez. p>
Puisque vous allez supprimer la branche de fonctionnalité de toute façon, vous n'avez pas besoin de voir une fusion explicite que je présume. P>
Je dirais que votre flux de travail est assez optimal. Je considérerais que la cueillette de cerisier est une overcilleuse (mais cela dépend du nombre de commits). P>
Ce que vous pourriez faire est de courger tous les engagements dans un seul et cerise-choisi / Rebase juste celui-ci. P>
et BTW, pourquoi ne pas écrire un script simple si c'est quelque chose que vous faites tout le temps? GIT est un outil de niveau peu bas, alors écrivez des scripts supplémentaires pour aider les tâches répétitives est une très bonne idée. P>
Ouais, le choix de la cerise semble être comme beaucoup de travail. En outre, lorsque je fais une fusion au coffre, je fais un -squash alors svn voit la dernière commission comme un commit unique. Et j'ai un script de bash à tout cela, je ne savais tout simplement pas s'il y avait un moyen plus facile, car j'ai «une pause» à chaque étape pour vérifier que rien ne s'est mal passé, fonctionne bien, il suffit de regarder tout le temps.
@JD Vérifiez simplement la valeur de retour GIT et si quelque chose échoue, il vous suffit de courir bash. Cela vous donnera une invite interactive à résoudre des trucs et lorsque vous quittez l'invite, le processus se poursuivra.
Pas une mauvaise idée, je vais essayer.
OK, je dirai une hérésie et tout le monde va me voter, mais allons-y. Si vous avez utilisé directement SVN, votre flux de travail serait beaucoup plus simple.
avec le - -Reintégrate caractéristique de Subversion Il est facile de maintenir votre succursale et votre succursale de débogage en synchronisation. Pour fusionner votre branche de fonctionnalité, vous fusionniez toutes les modifications de la branche de fonctionnalité dans le coffre. Les commandes seraient quelque chose comme: p>
pour fusionner le coffre à déboguer: p> pour fusionner la branche de fonctionnalité au coffre: p> < PRE> XXX PRE> Vous pouvez exécuter la dernière commande de fusion plusieurs fois si vous changez la branche après la fusion. Subversion se souviendra de la révision déjà fusionnée et n'essaiera pas de les faire deux fois. Si vous êtes sous Windows, le GRATUIT Tortoisesvn vous donnera une belle interface de fusion. P> BTW, j'essaierais de ne pas avoir une succursale séparée uniquement avec les fonctionnalités de débogage. Il est trop facile de faire une erreur manuelle et d'envoyer du code de débogage à votre tronc de production. J'utiliserais quelque chose de plus dynamique pour ne pas exécuter le code de débogage pendant la production. p> p>
Yup a rencontré le même problème d'envoi de code de débogage pour pousser avec SVN, c'est l'une des raisons pour lesquelles je passe à Git. Je peux simplement le dire de copier après le débogage de la tête sans avoir à suivre les numéros de révision.
Votre flux de travail est compliqué car ce que vous essayez de faire est compliqué. Aucun VCS que je connaisse vous permet de maintenir facilement certains changements qui ne devraient jamais être fusionnés. Il en dit long sur la puissance de Git que votre flux de travail n'est pas plus difficile que cela. P>
Je suppose que votre langue a une sorte de mécanisme de compilation conditionnel ( #Ifdef code> directives de préprocesseur, etc.). Si vous enveloppez votre code de débogage dans ceux-ci, vous vivrez beaucoup moins de friction. P>
Je fais du développement Web avec PHP. L'approche #Ifdef fonctionnerait, il suffirait de parler à mon patron et de voir si cela volera.
Si je vous comprends correctement, vous souhaitez que vos fonctionnalités de débogage ne soient uniquement dans votre succursale (jolie statique) de débogage, mais pas dans votre branche principale. Essayez ceci:
faire une "fausse fusion" de débogage dans le maître p> de cette façon, débogage sera fusionné dans Master, mais aucun de vos fichiers en maître n'aurai Changé. P> Vous pouvez simplement créer vos branches de fonctionnalité en plus de débogage et les fusionner en maître lorsque vous avez terminé. Git sait maintenant que les fonctionnalités de débogage sont dépouillées de Master: p> Vous pouvez transférer la succursale de débogage sur New_feature et supprimer la branche New_feature après cela. P> < P> Notez que chaque fois que vous modifiez la succursale de débogage, vous devez refaire la procédure de fausse fusion. p> p>
La succursale de débogage fonctionne, il déplace les changements de la branche de fonctionnalité qui souffre. J'ai une succursale de débogage fourchue du coffre, puis une branche de fonctionnalité fourchue de la succursale de débogage. Ensuite, je déplace le code de fonctionnalité en utilisant les commandes ci-dessus, essayant simplement de voir s'il y avait un moyen plus facile.
J'ai ajouté un exemple de comment fusionner le code de fonctionnalité dans le Maître. Est-ce plus clair maintenant?
+1, c'est une bonne technique à connaître. Cependant, votre code de débogage sera perdu dès que vous essayez de fusionner de nouvelles fonctionnalités de maître code>. Ainsi, après la fusion de nouvelles fonctionnalités dans
Débogou CODE>, Cherry-Choisissez votre débogage Enregistre dans
Débogou code> (c'est-à-dire moins de choix de cerises de cette façon). Aussi: lorsque vous faites une «fausse fusion», assurez-vous que le message Mergecommit reflète ce fait, pour la santé mentale de vos coéquipiers.
Peut-être que je devrais en faire une nouvelle question, mais est-ce vraiment une bonne pratique pour mettre le code de débogage dans sa propre branche plutôt que quelque chose que vous pouvez activer / désactiver au moment de l'exécution?
Personnellement, je ne veux pas courir le risque d'oublier d'ajouter des instructions #Ifdebug à mon code et de finaliser l'envoi de choses dans la production. J'ai aussi joué avec la notion de patchs. Créer un patch de débogage que je postulerais pendant le développement et la corrigez-la lorsqu'il était prêt à être libéré, mais cela causerait des conflits et d'essayer de garder le patch à jour était une douleur.
@Damien: Personnellement, je suis avec toi. Je pense que la solution la plus sane est d'autoriser l'activation / la désactivation des trucs de débogage au moment de l'exécution (ou dans le très i> moins, au moment de la compilation).