10
votes

Quelle est la meilleure façon de transférer une succursale de débogage de git-svn au coffre?

J'ai une configuration de coffre où tout mon code de production va.

alors j'ai une branche de débogage (parent est coffre ) 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.

enfin, j'ai une branche de la fonctionnalité (parent est débogage ) où je fais tout mon codage avec les avantages du débogage. Il y a des engagements constants à cette branche.

Je veux juste savoir s'il y a un moyen plus facile de déplacer mon code du code . C'est ce que je fais actuellement:

  1. Commettre toutes les modifications de mon Fonction Branche
  2. Switch to maître et git svn rebase changements d'autres devs.
  3. rebase My Branche sur la branche Master ( GIT REBASE --TOPLETO Fonction de débogage Master ) < / li>
  4. Fusionner fonction sur maître
  5. git svn dcommit modifications à d'autres devs
  6. rebase déboges à maître ( Git Rebase Master Débog )
  7. Supprimer Caractéristique Branche
  8. Créer une nouvelle fonctionnalité à partir de la branche de débogage .

3 commentaires

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 moins, au moment de la compilation).


6 Réponses :


0
votes

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.

Les branches peuvent être mises à jour si elles deviennent un peu anciennes.

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.

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.

espoir que cela aide


1 commentaires

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.



0
votes

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.

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.


0 commentaires

1
votes

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).

Ce que vous pourriez faire est de courger tous les engagements dans un seul et cerise-choisi / Rebase juste celui-ci.

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.


3 commentaires

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.



1
votes

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:

pour fusionner le coffre à déboguer: xxx

pour fusionner la branche de fonctionnalité au coffre: < PRE> XXX

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.

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.


1 commentaires

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.



0
votes

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.

Je suppose que votre langue a une sorte de mécanisme de compilation conditionnel ( #Ifdef directives de préprocesseur, etc.). Si vous enveloppez votre code de débogage dans ceux-ci, vous vivrez beaucoup moins de friction.


1 commentaires

Je fais du développement Web avec PHP. L'approche #Ifdef fonctionnerait, il suffirait de parler à mon patron et de voir si cela volera.



1
votes

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 xxx

de cette façon, débogage sera fusionné dans Master, mais aucun de vos fichiers en maître n'aurai Changé.

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: xxx

Vous pouvez transférer la succursale de débogage sur New_feature et supprimer la branche New_feature après cela. < P> Notez que chaque fois que vous modifiez la succursale de débogage, vous devez refaire la procédure de fausse fusion.


3 commentaires

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 . Ainsi, après la fusion de nouvelles fonctionnalités dans Débogou , Cherry-Choisissez votre débogage Enregistre dans Débogou (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.