Utilisez un système de contrôle de version distribué comme git et utilisez votre machine de dossiers partagés pour stocker le référentiel de référence. Voici pourquoi:
Chaque clone est une sauvegarde
Si le disque dur du serveur tombe en panne, tout le monde en a une copie, prête à être déployée sur un nouveau lecteur ou serveur. Comme votre entreprise n'est pas sérieuse à propos du contrôle de version, je suppose que cela peut être à peu près la même chose avec les sauvegardes.
Référence commune
Avoir un référentiel principal avec une branche master permet de connaître la version qui a le dernier mot. Cela résout le "Vous avez testé vos modifications par rapport à la version de Franck, mais avez-vous également John? Et comment les avez-vous fusionnés?".
Livrez plus confortablement
Le client veut une version alpha aujourd'hui? Eh bien, vous pouvez tester si le maître est suffisamment stable et l'expédier. Si ce n'est pas le cas et que vous n'avez pas le temps de le réparer, remontez dans le temps et obtenez une version plus ancienne mais plus stable. Vous ne pouvez pas faire cela si vous ne disposez que de la dernière version.
Remontez le temps et corrigez vos erreurs
Votre fusion manuelle a rencontré des problèmes que vous n'avez vus qu'après quelques jours, mais vous avez déjà remplacé le contenu de vos dossiers partagés? Sans VSC, vous n'avez pas d'historique, vous ne pouvez donc pas facilement revenir à un point où vous pouvez vérifier les erreurs que vous avez faites et les corriger. Le code n'est pas comme une image, c'est comme un film: il évolue dans le temps. Vous pouvez extraire une image d'un film. Vous ne pouvez pas extraire un film d'une image.
Localisez les bogues plus facilement
Un bogue est apparu mais vous ne l'aviez pas vraiment remarqué au moment de son introduction, vous ne pouviez donc pas le corriger tant que le code était "chaud". Maintenant, vous ne savez pas vraiment quel changement l'a introduit, il peut donc provenir de plusieurs emplacements différents dans le code. Cela prendra des heures juste pour trouver où chercher. Avec git, vous auriez pu simplement développer un test pour dire si le bug se produit sur une version spécifique, et utiliser git bissect
pour trouver le commit exact qui a introduit le bug. Au lieu de rechercher des milliers de lignes de code, vous savez maintenant qu'il se trouve dans le changement de 10 lignes et vous pouvez conserver le test dans votre suite de tests pour vous assurer que le bogue n'est pas réintroduit.
Chaque développeur est responsable de son propre travail
Si vous êtes le chef d'équipe et que vous n'avez pas de VCS, vous devrez très probablement faire le sale boulot, les fusions. Si vous le faites par vous-même, vous ne savez probablement pas tout sur tous les changements et vous risquez d'introduire des erreurs. Au contraire, si vous demandez toujours aux personnes qui ont écrit le code de se rassembler avec vous chaque fois qu'il y a du code à fusionner, c'est le moment où elles n'utiliseront pas pour produire du nouveau code.
Avec un VCS, dans un workflow simple, le développeur n'a qu'à prendre en charge son travail, et une seule source externe de changements: la branche master. Il peut y avoir 1 ou 100 personnes engagées dans la branche master, c'est pareil. Pour pouvoir pousser ses changements, il devra les adapter aux derniers changements effectués par d'autres. Il peut sembler qu'il faut plus de temps pour pousser le code, mais c'est parce que vous effectuez également la fusion qui aurait pris du temps de toute façon.
La différence est que la fusion est effectuée par la personne qui a effectué les modifications, qui connaît le mieux ce code parce qu'il l'a écrit.
Qui a écrit ce code?
Il y a ce bug ici, mais qui a écrit cette ligne de code particulière? C'est difficile à retenir, surtout si le projet dure plusieurs mois. git blame
vous aurait dit qui et quand cette ligne a été écrite, vous pouvez donc demander à la bonne personne, et il n'y a pas de "Je ne me souviens pas avoir écrit cela".
Le projet s'agrandit
Le client veut plus de fonctionnalités et vous êtes une équipe trop petite, vous aurez besoin d'un autre développeur. Comment gérez-vous la complexité accrue des fusions sans VSC?
Changements urgents
Le client a appelé et a demandé une correction de bogue critique pour la production, mais vous travailliez actuellement sur une nouvelle fonctionnalité. Juste git stash
pour mettre vos modifications de côté, ou les valider dans une nouvelle branche et pousser les modifications et vous êtes prêt à commencer à travailler sur le correctif urgent, sans craindre de perdre votre travail en attente.
Cela a fonctionné il y a 10 minutes
Vous effectuez des changements localement et quelque chose qui a fonctionné il y a 10 minutes a cessé de fonctionner. Sans VCS, vous regardez le code ou au mieux, faites une copie de la version de référence et différez pour voir ce que vous changez. Oh, attendez, la référence a changé depuis que j'ai commencé à travailler, donc je ne peux plus faire de différence. Et je ne pensais pas garder une copie vierge du code sur lequel j'ai basé mes modifications.
Avec un VCS, vous faites juste quelque chose comme git diff
tout de suite, et vous changez par rapport à la bonne version du code sur lequel vous êtes basé.
Je dois conserver mes journaux de débogage
Vous êtes donc un méchant et n'utilisez pas la journalisation? Vous avez dû saupoudrer printf
s dans toute votre base de code jusqu'à ce que vous trouviez tous ces morceaux de ce méchant bug? Vous en avez maintenant trouvé un, corrigé, mais vous souhaitez conserver votre code de débogage soigneusement conçu pour résoudre les problèmes restants.
Sans VCS, vous devez soit copier les fichiers, développer le code de débogage (ce qui peut ajouter des erreurs d'édition), pousser cela et remettre vos fichiers sauvegardés. Oh, mais il semble que du code de débogage soit entré de toute façon.
Avec git, il vous suffit de git add --patch
sélectionner les quelques lignes de code que vous souhaitez mettre dans votre commit, et vous ne pouvez valider que cela. Ensuite, vous reprenez votre travail et avez toujours votre code de débogage. Vous n'avez pas eu à toucher le code, donc aucune erreur de copier / coller.
La grosse boule de boue
Sans VCS, les gens travaillent de leur côté et vous donnent un tas de changements, parfois sans rapport. Lorsqu'il y a trop de code à vérifier, il est difficile de trouver un bogue.
Un VCS vous permettra d'effectuer de petites modifications incrémentielles et vous donnera un journal des modifications. Le changelog est essentiel: les gens doivent dire qu'il pourquoi ils font le changement, et non pas ce qui est le changement (la quelle question est alredy répondu par le changement de code lui - même). Cela signifie que lorsque vous inspectez du code d'une nouvelle fonctionnalité par exemple, vous n'aurez pas à lire de nombreuses modifications mixtes non liées, comme des corrections de bogues non liées. Cela permet de se concentrer sur le code qui vous intéresse.
Si je vous donne 100 pommes de terre 1 par 1, et qu'une est pourrie, vous la trouverez immédiatement. Maintenant, si je dépose 100 pommes de terre devant vous et vous demande de trouver celle qui est pourrie, ce n'est pas la même tâche.
Échancrure
J'espère que vous avez une bonne politique de style de codage, sinon les changements d'indentation vous rendront fou si vous fusionnez à la main. Bien sûr, vous pouvez ignorer les espaces dans les modifications (mais pas dans les langues lorsque l'indentation compte, comme Python). Mais alors vous aurez du code bizarre difficile à lire.
Vous êtes chef de projet
Si vous êtes le leader, cela signifie que vous serez blâmé si les choses ne fonctionnent pas. Si vous n'êtes pas à l'aise avec la situation parce que votre patron ne comprend toujours pas que l'utilisation du bon outil pour le bon travail en vaut la peine, alors au moins, je refuserais de devenir le leader d'un échec prévisible.