Je suis donc en train de faire vendre GIT au travail. La première chose dont j'ai besoin est de convaincre tout le monde que GIT est meilleur que ce à quoi il est déjà habitué. Nous utilisons actuellement Perforce. Quelqu'un d'autre passe une vente similaire? Des bons liens/conseils?
L’une des grandes victoires est que nous pouvons travailler avec ce réseau déconnecté du réseau. Une autre victoire IMO est la façon dont les ajouts/extractions sont gérés. Plus de points sont les bienvenus! Nous avons aussi environ 10-20 devs au total.
Le code source de l’interprète Perl 5 est en train de passer de Perforce à la conversion en git. Peut-être que Sam Vilain's git-p4raw
importateur est d’intérêt.
Dans tous les cas, l’un des gains majeurs que vous obtiendrez sur tous les VCS centralisés et les plus distribués est également brutal rapidité. Vous ne pouvez pas imaginer à quel point il est libéralisant de disposer de l'historique du projet dans son intégralité, quelques fractions de fraction de seconde, avant de l'avoir expérimenté. Même la génération d'un journal de validation de l'historique complet du projet incluant un diff complet pour chaque validation peut être mesurée en fractions de seconde. Git est si rapide que ton chapeau s'envolera. Les VCS qui doivent aller-retour sur le réseau n'ont tout simplement aucune chance de se faire concurrence, même sur une liaison Gigabit Ethernet.
De plus, avec git, il est très facile de sélectionner avec soin les commits, ce qui permet de modifier les modifications apportées à votre copie de travail (ou même au sein d’un même fichier) sur plusieurs commits - et entre différentes branches si vous en avez besoin. Cela vous permet de prendre moins de notes mentales lorsque vous travaillez. Vous n'avez pas besoin de planifier votre travail avec autant de soin, de décider dès le départ des modifications à apporter et de reporter tout ce qui vous est demandé. Vous pouvez simplement apporter les modifications que vous souhaitez au fur et à mesure qu'elles se produisent, tout en les démêlant - presque toujours assez facilement - au moment de la validation. La cachette peut être d'une très grande aide ici.
J'ai constaté qu'ensemble, ces faits m'obligent à faire naturellement beaucoup plus de commits plus ciblés qu'auparavant. Cela rend non seulement votre historique généralement plus utile, mais est particulièrement bénéfique pour les outils à valeur ajoutée tels que git bisect
.
Je suis sûr qu'il y a plus de choses auxquelles je ne peux pas penser maintenant. Un problème avec la proposition de vendre votre équipe sur git est que de nombreux avantages sont interdépendants et se jouent mutuellement, comme je l’ai indiqué plus haut, de sorte qu’il est difficile de simplement regarder une liste de fonctionnalités et d’avantages de git et de déduire comment vont changer votre flux de travail, et quels changements vont être de véritables améliorations. Vous devez en tenir compte et vous devez également le signaler explicitement.
J'utilise Perforce au travail. J'utilise aussi Git parce que je voudrais quand même une forme de contrôle de version lorsque je travaille sur du code et que je ne peux pas me connecter au serveur. Non, réconcilier le travail hors connexion n'est tout simplement pas la même chose. Voici où j'ai trouvé que git était un grand avantage:
Eh bien, ce sont mes 2 cents. À la défense de Perforce, je dois dire que leurs règles de support client, tout comme leur outil Time Lapse View. Je ne sais pas comment obtenir une vue en accéléré avec git. Mais pour la commodité et le temps économisé, j'irais avec git n'importe quel jour.
Il me faudrait beaucoup de conviction pour passer de force à autre chose. Dans les deux sociétés que j'ai utilisées, c'était plus que suffisant. C'étaient deux entreprises avec des bureaux disparates, mais les bureaux ont été mis en place avec une infrastructure importante, de sorte qu'il n'était pas nécessaire de disposer de fonctionnalités disjointes/déconnectées.
Combien de développeurs parlez-vous de basculer?
La vraie question est la suivante: qu'est-ce qui ne répond forcément pas aux besoins de votre organisation que git peut fournir? Et de même, quelles sont les faiblesses de git par rapport à celles de force? Si vous ne pouvez pas y répondre vous-même, demander ici ne vous aidera pas. Vous devez trouver une analyse de rentabilisation pour votre entreprise. (par exemple, le coût total de possession est peut-être plus faible (ce qui inclut une perte de productivité au stade de l'apprentissage intermédiaire, des coûts administratifs plus élevés (au moins au début), etc.)
Je pense que vous allez avoir une vente difficile - il est forcément un très bon joueur à remplacer. C'est une évidence si vous essayez de démarrer pvcs ou ssafe.
Je pense que pour garder les gens heureux pendant/après le changement de poste, une des choses à savoir plus tôt est à quel point une succursale locale peut être privée dans Git et quelle marge de manœuvre lui donne la liberté de faire des erreurs. Demandez-leur à tous de se cloner quelques branches privées du code actuel, puis de s’y perdre, d’expérimenter. Renommez des fichiers, archivez des éléments, fusionnez des éléments d’une autre branche, rembobinez l’historique, modifiez un jeu de modifications par-dessus un autre, etc. Montrez que même les pires accidents locaux n'ont pas de conséquences pour leurs collègues. Ce que vous voulez, c'est une situation dans laquelle les développeurs se sentent en sécurité, afin qu'ils puissent apprendre plus rapidement (puisque Git a une courbe d'apprentissage abrupte qui est importante), puis éventuellement pour être plus efficaces en tant que développeurs.
Lorsque vous essayez d’apprendre à utiliser un outil centralisé, vous aurez évidemment peur de créer des erreurs qui pourraient poser problème à d’autres utilisateurs du référentiel. La peur de l’embarras suffit à décourager les gens de faire des expériences. Même avoir un référentiel spécial "formation" n'aide pas, car les développeurs vont inévitablement rencontrer une situation dans le système de production qu'ils n'ont jamais vue pendant la formation, et ils sont donc de nouveau inquiets.
Mais la nature distribuée de Git fait disparaître cela. Vous pouvez essayer n'importe quelle expérience dans une branche locale, et si tout se passe mal, il suffit de jeter la branche et personne ne doit le savoir. Étant donné que vous pouvez créer une branche locale de n'importe quoi, vous pouvez reproduire un problème que vous voyez avec le référentiel réel, sans risquer de "casser la construction" ou de vous ridiculiser. Vous pouvez absolument tout vérifier, dès que vous l'avez fait, vous ne devez pas essayer de travailler par lots dans de petits paquets ordonnés. Ainsi, non seulement les deux modifications majeures de code que vous avez passées quatre heures aujourd'hui, mais également les correctifs de construction dont vous vous souveniez à mi-chemin, ainsi que l'erreur d'orthographe dans la documentation que vous avez repérée en expliquant quelque chose à un collègue, etc. Et si les modifications majeures sont abandonnées parce que le projet change de direction, vous pouvez choisir le correctif de construction et la faute d’orthographe de votre branche et les conserver sans tracas.
Quelles sont les fonctionnalités utilisées par Perforce?
Je demande parce que si tout ce que les gens font est obtenir et mettre à partir de la ligne de commande, git a couvert, et il en va de même pour tous les autres RTS.
La commande qui m'a vendu sur git personnellement était bissect . Je ne pense pas que cette fonctionnalité soit disponible dans aucun autre système de contrôle de version pour le moment.
Cela dit, si les utilisateurs sont habitués à un client d'interface graphique pour le contrôle de source, ils ne seront pas impressionnés par git. Actuellement, le seul client complet est la ligne de commande.
Apparemment GitHub propose désormais des cours de formation git aux entreprises . Quoth leur blog à ce sujet :
Au cours des dernières semaines, je me suis rendu plusieurs fois sur le campus de Google pour y former les androïdes de Git. Shawn Pearce m'a demandé (vous le connaissez peut-être de sa gloire Git et EGit/JGit - il est le héros qui prend en charge la maintenance de Junio) pour l'aider à former les ingénieurs de Google travaillant sur Andriod en transition de Perforce à Git, donc Android pourrait être partagé avec les masses. Je peux vous dire que j'étais plus qu'heureux de le faire.
[…]
Logical Awesome est maintenant offre officielle ce type de service de formation personnalisé pour toutes les entreprises, où nous pouvons aider votre organisation en matière de formation et de planification si vous envisagez de passer également à Git.
L'accent est à moi.
Nous utilisons Git depuis quelque temps. Récemment, le disque dur de notre serveur Git est tombé en panne et nous ne pouvions pas revenir à l'état le plus récent. Nous avons réussi à revenir à l'état de quelques jours. Quand le serveur a été sauvegardé. Tout le monde dans l'équipe a tiré/poussé leurs changements et voila, le serveur est revenu à son état actuel.
J'utilise Perforce depuis longtemps et récemment, j'ai aussi commencé à utiliser GIT. Voici mon avis "objectif":
Caractéristiques Perforce:
Caractéristiques GIT:
Globalement, pour les projets OpenSource/Distributed, je recommanderais toujours GIT, car il s’agit plus d’une application P2P et tout le monde peut participer au développement. Par exemple, je me souviens que lorsque je faisais du développement à distance avec Perforce, je synchronisais des projets de 4 Go sur un lien de 1 Mbps une fois par semaine. Beaucoup de temps a simplement été perdu à cause de cela. Nous devions également configurer un VPN pour le faire.
Si vous avez une petite entreprise et que le serveur P4 sera toujours opérationnel, je dirais que Perforce est également une très bonne option.
Je pense que la seule chose sur laquelle GIT gagne, c’est sa capacité à "conserver les fins de ligne" sur tous les fichiers, alors qu’il semble forcément insister pour les traduire au format Unix, Dos/Windows ou MacOS9 ("\ n", "\ r\n "ou"\r).
C’est un réel problème si vous écrivez des scripts Unix dans un environnement Windows ou un environnement OS mixte. Il n'est même pas possible de définir la règle extension par fichier. Par exemple, il convertit les fichiers .sh, .bash, .unix au format Unix et convertit les fichiers .ccp, .bat ou .com au format Dos/Windows.
Dans GIT (je ne sais pas si c'est par défaut, une option ou la seule option), vous pouvez le configurer pour "conserver les fins de ligne". Cela signifie que vous pouvez modifier manuellement les fins de ligne d'un fichier, puis GIT laissera ce format tel quel. Cela me semble être le moyen idéal de faire les choses et je ne comprends pas pourquoi ce n'est pas une option avec Perforce.
La seule façon d’obtenir ce comportement consiste à marquer les fichiers en tant que fichiers binaires. À mon avis, ce serait un vilain stratagème de contourner une fonctionnalité manquante. En plus d'être fastidieux d'avoir à faire sur tous les scripts, etc., il casserait probablement la plupart des diffs, etc.
La "solution" que nous avons choisie pour le moment consiste à exécuter une commande sed pour supprimer tous les retours chariot des scripts chaque fois qu'ils sont déployés dans leur environnement Unix. Cela n’est pas non plus idéal, d’autant plus que certains d’entre eux sont déployés dans des fichiers WAR et que la ligne sed doit être réexécutée une fois décompressée.
C’est quelque chose qui, selon moi, donne un avantage considérable à GIT, et qui, à mon avis, n’a pas été mentionné plus haut.
EDIT: Après avoir utilisé Perforce un peu plus longtemps, j'aimerais ajouter quelques commentaires:
A) Quelque chose me manque vraiment dans Perforce, c’est un diff clair et d’instance, y compris les fichiers modifiés, supprimés et ajoutés. Ceci est disponible dans GIT avec le git diff
commande, mais dans Perforce, les fichiers doivent être extraits avant que leurs modifications ne soient enregistrées, et même si vos éditeurs principaux (comme Eclipse) sont configurés pour extraire automatiquement les fichiers lorsque vous les modifiez, vous pouvez parfois les modifier autres moyens (bloc-notes, commandes unix, etc.). Et les nouveaux fichiers ne semblent pas du tout être ajoutés automatiquement, même en utilisant Eclipse et p4Eclipse, ce qui peut être assez gênant. Donc, pour trouver tous les changements, vous devez exécuter un "Diff contre ..." sur tout l'espace de travail, qui prend d'abord un certain temps à exécuter et qui, en second lieu, inclut toutes sortes de choses non pertinentes, sauf si vous configurez des listes d'exclusion très compliquées. ce qui m'amène au point suivant.
B) Dans GIT, je trouve le .gitignore très simple et facile à gérer, à lire et à comprendre. Cependant, l’espace de travail qui ignore les listes d’exclusion/exclusion configurables dans Perforce semble difficile à manier et inutilement complexe. Je n'ai pas réussi à obtenir des exclusions lorsque les caractères génériques fonctionnent. Je voudrais faire quelque chose comme
-//Server/mainline/.../target/... //Svend_Hansen_Server/.../target/...
Pour exclure tous les dossiers cibles de tous les projets dans Server/Mainline. Cependant, cela ne semble pas fonctionner comme je l'aurais prévu, et j'ai fini par ajouter une ligne pour chaque projet comme:
-//Server/mainline/projectA/target/... //Svend_Hansen_Server/projectA/target/...
-//Server/mainline/projectB/target/... //Svend_Hansen_Server/projectB/target/...
...
Et des lignes similaires pour les dossiers bin, les fichiers .classpath et .projet, etc.
C) En réalité, il existe des listes de modifications plutôt utiles. Cependant, supposons que je fasse un groupe de modifications, que je les vérifie toutes et que je les mette dans une liste de modifications, puis que je travaille sur autre chose avant de soumettre cette liste de modifications. Si je modifie ultérieurement l'un des fichiers inclus dans la première liste de modifications, ce fichier sera toujours dans cette liste de modifications et je ne pourrai plus soumettre la liste de modifications en supposant qu'elle ne contienne que les modifications que j'ai ajoutées à l'origine (bien qu'elle seront les mêmes fichiers). Dans GIT, si vous ajoutez un fichier et qu’ils y apportent d’autres modifications, elles n’auront pas été ajoutées (et seront toujours affichées dans un fichier git diff
et vous ne pourrez pas valider le fichier sans ajouter d’abord les nouvelles modifications. Bien sûr, cela n’est pas utile de la même manière que la liste de modifications peut être car vous n’avez qu’un ensemble de fichiers ajoutés, mais dans GIT, vous pouvez simplement valider les modifications, car cela ne les pousse pas réellement. Vous pouvez les utiliser pour d’autres modifications avant de les appliquer, mais vous ne pourrez pas appliquer d’autres éléments que vous ajouterez ultérieurement, sans appliquer également les modifications précédentes.
La principale différence entre Perforce et git (et la plus citée) est leur traitement respectif d’énormes fichiers binaires.
Comme par exemple dans ce blog d'un employé d'une entreprise de développement de jeux vidéo: http://corearchitecture.blogspot.com/2011/09/git-vs-perforce-from-game-development.html
Cependant, l’important est que la différence de vitesse entre git et forforce, lorsque vous avez un énorme référentiel de 6 Go, contenant tout, de la documentation à chaque binaire jamais construit (et enfin, oh oui! L’historique des sources), provient généralement du fait que les grandes entreprises ont tendance à exécuter Perforce, et qu’elles ont donc été configurées pour transférer toutes les opérations importantes à la gigantesque banque de serveurs située au sous-sol.
Cet avantage important de la part de Perforce ne provient que d'un facteur qui n'a absolument rien à voir avec Perforce, le fait que la société qui l'exploite puisse se permettre d'acheter ladite banque de serveurs.
Et, de toute façon, à la fin, Perforce et git sont des produits différents. Git a été conçu pour être uniquement un VCS, et il le fait beaucoup mieux que Perforce (dans la mesure où il a plus de fonctionnalités, qui sont généralement plus faciles à utiliser, en particulier, pour reprendre les mots d'un autre, le fait de créer des branches dans Perforce revient à effectuer des tâches à cœur ouvert. chirurgie, elle ne devrait être effectuée que par des experts: P) ( http://stevehanov.ca/blog/index.php?id=5 )
Tous les autres avantages dont bénéficient les entreprises qui utilisent Perforce proviennent du simple fait que Perforce n’est pas uniquement un VCS, c’est aussi un serveur de fichiers, ainsi que de nombreuses autres fonctionnalités permettant de tester les performances des versions, etc.
Enfin: Git étant open-source et beaucoup plus flexible pour démarrer, il ne serait pas si difficile de le corriger pour décharger des opérations importantes sur un serveur central, exécutant des monticules de matériel coûteux.
Je n'ai aucune expérience avec Git, mais j'ai avec Mercurial, qui est également un VCS distribué. Cela dépend vraiment du projet, mais dans notre cas, un VCS distribué convenait parfaitement au projet car il éliminait essentiellement les versions cassées fréquentes.
Je pense que cela dépend vraiment du projet, car certains conviennent mieux à un VCS client-serveur, et d'autres à un système distribué.