Quelles sont les bonnes stratégies d'enregistrement du contrôle de code source pour les tâches importantes?

9

La règle générale est de limiter les enregistrements et les enregistrements fréquents. Mais parfois, la tâche nécessite des modifications importantes du cadre sous-jacent. Ensuite, l'archivage avant la fin de la tâche interrompra le projet jusqu'à ce que vous archiviez le travail terminé.

Alors, quelles stratégies les gens utilisent-ils pour réduire le risque de perdre du travail ou de décider que quelque chose que vous faites est la mauvaise approche, puis changer d'avis après avoir supprimé le code et essayé une autre approche?

Lorsque je le pourrai, j'enregistrerai le travail à moitié terminé commenté, ou s'il compile et que rien n'utilise de nouveaux fichiers, je les archiverai. quand j'ai tout recommencé. Une autre option si le système de contrôle de source le permet est les ensembles d'étagères, qui sont essentiellement de petites branches. Donc, quand j'aurai fini la journée ou arriverai à un point de décision, je mettrai de côté mes changements, puis si quelque chose de catastrophique se produit, ou si je veux revenir sur ce point, je le peux.

Dominique McDonnell
la source
Quels systèmes de contrôle des sources connaissez-vous?
@Thorbjorn: Svn, Perforce et Team Foundation Server. Ils ont tous leurs avantages et leurs inconvénients
Dominique McDonnell

Réponses:

13

J'utilise git, donc ma réponse est "branche". Branche-toi et engage-toi à la pièce pendant que tu termines les différents morceaux.

Poussez vos commits en amont lorsque vous êtes satisfait, afin que vos collègues puissent examiner les modifications sans perturber le tronc.

Lorsque tout le monde est satisfait du code, fusionnez et vous avez terminé!

(Ce que j'ai tendance à faire pour les branches relativement longues est de fusionner périodiquement le tronc (maître, en terminologie git) dans ma branche, afin que les deux branches ne divergent pas trop radicalement.)

Frank Shearar
la source
1
Vous n'avez pas besoin de vous qualifier avec "J'utilise git" - je dirais que la réponse est de créer un branchement complet. La clé est cependant de s'assurer que la branche de fonctionnalité est mise à jour avec le tronc, ce qui signifie que la fusion des modifications du tronc est aussi fréquente et raisonnable.
Murph
Je n'ai pas utilisé de branchement avec subversion, mais on me dit qu'il est énormément plus facile de se brancher dans git. Je branche quand j'ai une fonctionnalité qui n'est pas anodine. Apparemment, ce n'est pas pratique avec la subversion, d'où ma qualification. Je suis content d'apprendre que je n'avais pas vraiment besoin de me qualifier.
Frank Shearar
Donc, fondamentalement, la meilleure stratégie consiste à créer une branche dès que la taille de la tâche n'est pas triviale et à fusionner le tronc avec la branche autant que nécessaire pour le conserver comme une extraction normale du tronc, avec l'avantage du contrôle de source du étapes intermédiaires.
Dominique McDonnell
1
@Dominic Fondamentalement, oui, mais je considère que "la taille n'est pas triviale" signifie "autre chose qu'une simple ligne qu'un pair peut immédiatement voir est bonne ou mauvaise".
Frank Shearar
3

Je pense que la réponse va varier en fonction du type de système de contrôle de version que vous utilisez: centralisé (par exemple, subversion) ou distribué (par exemple, git). Je n'ai aucune expérience du monde réel avec l'utilisation d'un système de contrôle de source distribué, donc ma réponse est basée sur ce que nous faisons avec la subversion.

S'il y a un grand changement en cours qui cassera notre construction de tronc sur une période de temps, ou qui perturbera vraiment le reste de l'équipe d'une autre manière, alors nous créerons une branche. Je dirais cependant que vous devriez faire tout ce que vous pouvez pour éviter d'avoir à le faire - la plupart des changements peuvent être côte à côte avec le reste du code avec peu d'effort. Par exemple, vous pouvez déclencher des chemins de code dans le nouveau code (avec des instructions if simples ou vous pouvez injecter les nouvelles versions basées sur les paramètres de configuration si vous utilisez un framework DI). Ensuite, lorsque vous avez terminé, modifiez simplement la configuration à la nouvelle version, testez tout, supprimez le code inutilisé, testez à nouveau et supprimez enfin le paramètre de configuration. Vous ne pouvez pas toujours le faire, mais en raison des frais généraux liés au maintien d'une succursale, je pense que vous devriez toujours vérifier si cela est possible.

Si vous faites une succursale, je pense que l'erreur que je vois souvent faire n'est pas de garder sa succursale à jour avec le coffre. Vous devez constamment fusionner les modifications du tronc dans votre branche pendant qu'elle existe, de sorte que lorsque vous avez terminé, la fusion inverse de tout est à nouveau assez banale.

FinnNk
la source
2

Dans notre équipe, nous utilisons la subversion, et nous validons normalement de petits changements directement dans le tronc. Pour les tâches plus importantes, le développeur qui y travaille crée généralement une branche privée, qui est fusionnée dans le tronc une fois l'opération terminée. Ensuite, la branche privée est supprimée. Naturellement, bien que la branche privée existe, son propriétaire doit y vérifier souvent.

Nous essayons d'éviter d'avoir des succursales de longue durée et des fusions de tronc à branche, car cela nécessite une comptabilité rigoureuse. Au lieu de cela, nous avons des branches à durée de vie relativement courte qui ne sont fusionnées que dans le tronc une fois et sont supprimées peu de temps après.

Et nous avons une règle selon laquelle rien ne peut être validé ou fusionné dans le coffre jusqu'à ce qu'au moins une autre personne examine les modifications et les approuve.

Dima
la source
0

Tout comme le commentaire habituel des gens du serveur SQL "ça dépend"

Si vous le pouvez, je vous suggère de créer une branche sur le code afin que vous puissiez continuer à appliquer de petits enregistrements de votre travail. Une fois terminé, effectuez une fusion dans le coffre principal.

Oui, il y a une chance de redoubler d'efforts pour ce faire. mais au moins vous maintiendrez une piste de travail, vous pouvez la faire reculer, elle se révèle être une impasse.

GrumpyMonkey
la source