30 votes

DVCS - À quelle fréquence et quand valider les modifications

Il y a un autre fil ici sur StackOverflow, traiter avec la fréquence de valider les modifications apportées à la source de contrôle. Je veux mettre cela dans le contexte de l'utilisation d'un DVCS comme git ou mercurial.

  1. Combien de fois et quand pensez-vous engager?

  2. Avez-vous seulement de valider les modifications quand ils construire correctement?

  3. Combien de fois et quand vous poussez vos modifications (ou de déposer une demande d'extraction ou similaire)?

  4. Comment avez-vous approac le développement d'une fonction complexe / faire un complexe de refactoring nécessitant beaucoup d'endroits pour être touché? Sont "privé s'engage" à ne pas construire ok? Lorsque vous avez terminé, faites-vous pousser aussi à la maîtrise ou au référentiel ne permet de regrouper tous vos modifications dans un seul ensemble de modifications avant de le pousser?

14voto

VonC Points 414372

Il dépend de la nature de la branche ("ligne de développement") vous travaillez sur.

Le principal avantage de ces DVCS (git ou mercurial), c'est la facilité, vous pouvez:

  • branche
  • fusion

Donc:

1/ Combien de fois et quand pensez-vous engager?
2/ avez-vous seulement de valider les modifications quand ils construire correctement?

Autant de fois que nécessaire sur une branche privé (par exemple, si il compile).
La pratique n'engagent que si les tests unitaires passent est bonne, mais ne devrait s'appliquer qu'à un "officiel" (comme dans "pourrait être publié ou 'poussé'") direction générale: dans votre branche, vous fusionnez un gazillon fois si vous en avez besoin.
La seule chose est: certaines fusion --interactive pour le réaménagement de votre nombre de commits sur votre branche privé, avant de rejouer sur votre branche de développement principale, où vous pouvez passer quelques tests.

3/ Combien de fois et quand vous poussez vos modifications (ou de déposer une demande d'extraction ou similaire)?

La Publication est une autre affaire et doit être fait avec un "clair" de l'histoire (cohérent fusionne, représentant un contenu qui, de compiler et de passer certains tests).
La branche que vous publiez doit être celle où l'histoire n'est jamais réécrit, toujours mis à jour.
Le rythme des publications dépend de la nature de la distance et de la population en tirant de cette branche. Par exemple, si c'est pour une autre équipe, vous pourrait pousser assez souvent. Si c'est pour un système d'intégration à l'échelle de l'équipe de test, vous ne poussez beaucoup moins souvent.

4/ Comment abordez-vous le développement d'une fonction complexe / faire un complexe de refactoring nécessitant beaucoup d'endroits pour être touché? Sont "privé s'engage" à ne pas construire ok? Lorsque vous avez terminé, faites-vous pousser aussi à la maîtrise ou au référentiel ne permet de regrouper tous vos modifications dans un seul ensemble de modifications avant de le pousser?

Voir 1. et 2.: patch d'abord dans votre propre branche, réorganiser votre s'engage sur un officiel (publié) branche patch. Un seul commit n'est pas toujours la meilleure option si le patch comporte plusieurs "activités" (ou correction de bug).

5voto

pablo Points 3496

J'avais valider les modifications apportées à mon DVCS (mon propre sujet des tâches ou de la branche) très, très souvent, de cette façon, je peux l'utiliser non seulement pour "réaliser le changement", mais aussi pour m'aider pendant que je travaille: "pourquoi c'était il ya 5 minutes et ça ne marche plus?" Si vous vous engagez souvent, vous pouvez simplement exécuter un diff.

Aussi, une technique que j'ai trouvé très, très bon, c'est de l'utiliser à "l'auto-document refactors". Je m'explique: si vous avez à faire un gros refactoriser sur un sujet de branche et d'examiner ensuite le modifier dans son ensemble (après avoir modifié une belle série de fichiers), vous auriez probablement se perdre. Mais, supposons que vous checkin sur chaque "étape intermédiaire" et le document avec un commentaire, alors vous êtes en train de créer une sorte de "film" de vos propres changements d'aider à décrire ce que vous avez fait! Énorme pour les examinateurs.

4voto

Abizern Points 52378

J'ai commis beaucoup; lors de l'ajout de fonctions ou même le reformatage de mon sources.

J'utilise git et fais la plupart de mon travail sur la non-partagé branches. Et quand j'ai ajouté assez peu de changements qui comptent comme un bloc, j'utilise git rebase pour recueillir les petits changements liés à de plus gros morceaux et s'engager à ce que les branches principales.

De cette façon, j'ai tous les avantages de code que je peux aller en arrière ou en avant, mais je n'ai pas à commettre toutes mes erreurs, et bactracks pour le principal de l'histoire.

1voto

gavinb Points 9237

Combien de fois et quand pensez-vous engager?

Très fréquemment. Il pourrait être autant que quelques fois dans une heure, si les modifications que j'ai faite de travail et de faire un joli patch. Ou peut-être toutes les quelques heures, selon que je suis des dépenses de plus de débogage des choses, ou des expérimentations risquées changements.

Avez-vous seulement de valider les modifications quand ils construire correctement?

Oui, presque toujours. Je ne peux pas penser à une raison droit de vérifier dans le code qui n'a pas construit correctement. Il y a beaucoup de raisons pour lesquelles vous devriez vérifier dans le code qui ne veut pas s'exécuter correctement (dans une direction) si.

Combien de fois et quand vous poussez vos modifications (ou de déposer une demande d'extraction ou similaire)?

Normalement quand une fonctionnalité est complet et prêt pour le test d'intégration. Cela signifie qu'il a passé des tests unitaires et d'autres tests, et le code/patch est assez propre que je considère qu'il est prêt pour l'examen.

Comment avez-vous approac le développement d'une fonction complexe / faire un complexe de refactoring nécessitant beaucoup d'endroits pour être touché? Sont "privé s'engage" à ne pas construire ok? Lorsque vous avez terminé, faites-vous pousser aussi à la maîtrise ou au référentiel ne permet de regrouper tous vos modifications dans un seul ensemble de modifications avant de le pousser?

Je voudrais créer une branche nommée pour la fonctionnalité (qui aurait la traçabilité dans la conception de docs et de système de Suivi de Problème). S'engage à ce que de ne pas construire serait vraiment ok sur une branche comme une étape intermédiaire, mais ce serait encore exceptionnelle. Actuellement je n'ai pas rebase et de fusionner l'ensemble de la branche en un seul ensemble de modifications, si c'est quelque chose que je suis à la recherche à faire dans l'avenir. Les changements sont poussés lors des essais appropriés sont tous passés.

0voto

Juri Points 14330

J'ai suivi ce type de flux
alt text

(Lire ici l'url de l'image)

Je suppose que cela dit à peu tout. En gros je voudrais faire un check-in après la mise en œuvre d'un travail plein de cas d'utilisation / user story (dépend de votre logiciel de processus). La principale chose importante est que vous le check-in des choses qui fonctionnent dans le sens qu'ils compiler. Ne jamais briser la construction!
Faire un commit après chaque article de l'utilisateur/cas d'utilisation a l'avantage que vous avez un meilleur suivi des dernières versions et l'annulation des modifications est beaucoup plus facile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X