Cela va sembler contre-intuitif, mais écoutez-moi:
Encouragez-les à commencer à expérimenter avec git
L'un des aspects intéressants de git est qu'il est étonnamment facile de sécuriser complètement toute opération locale. Lorsque j'ai commencé à utiliser git, l'une des choses que je me trouvais capable de faire était de compresser l'intégralité du répertoire en tant que sauvegarde au cas où je ferais n'importe quoi. J'ai découvert par la suite que c’était un énorme kludge et qu’il n’était presque jamais nécessaire de protéger votre travail, mais cela a le mérite d’être très sûr et très simple, même si vous ne savez pas ce que vous faites et comment. la commande que vous voulez essayer deviendra. La seule chose que vous devez éviter lorsque vous faites cela est push
. Si vous ne poussez rien, c’est un moyen sûr à 100% d’essayer ce que vous voulez.
La peur d'essayer des trucs est l'un des plus gros obstacles à l'apprentissage des imbéciles. Cela vous donne tellement de contrôle sur tout que c'est assez intimidant. La réalité est que vous pouvez vous en tenir à quelques opérations très sûres pour la plupart de vos utilisations quotidiennes, mais il est difficile de trouver les commandes qui vous conviennent.
En leur donnant un sentiment de sécurité , ils seront beaucoup plus disposés à essayer de comprendre comment faire les choses par eux-mêmes. Et ils seront beaucoup plus en mesure de trouver un flux de travail personnel sur leur machine locale qui fonctionne pour eux. Et si tout le monde ne fait pas la même chose localement , c'est bien, tant qu'ils adhèrent aux normes avec ce qu'ils poussent . S'il faut zipper l'intégralité du référentiel avant de procéder à une opération pour leur donner cette impression, c'est bien; ils peuvent trouver de meilleures façons de faire les choses au fur et à mesure qu'ils essaient. N'importe quoi pour que vous commenciez à essayer des choses et à voir ce qu'elles font.
Cela ne signifie pas que la formation ne vaut rien. Au contraire, la formation peut vous aider à vous familiariser avec les caractéristiques, les modèles et les normes. Mais ce n'est pas un remplacement pour s'asseoir et faire des choses dans votre travail quotidien. Ni git, ni SVN ne sont des choses que vous pouvez simplement aller à une classe et alors vous savez tout. Vous devez les utiliser pour résoudre vos problèmes, pour vous familiariser avec celles-ci et les fonctionnalités adaptées à chaque problème.
Arrêtez de les décourager d'apprendre les tenants et les aboutissants de git
J'ai dit de ne rien pousser, ce qui va en fait à l'encontre de ce que vous leur avez enseigné: toujours "Commit & Push". Je crois que vous devriez cesser de leur dire de faire cela et de leur dire de commencer à faire le contraire. Git a essentiellement 5 "endroits" où vos changements peuvent être:
- Sur le disque, non engagé
- Mis en scène mais non engagé
- Dans un commit local
- Dans une cachette locale
- Référentiels distants (seules les validations et les balises sont poussées et extraites entre les différents référentiels)
Au lieu de les encourager à tirer et à pousser tout en un seul geste, encouragez-les à tirer parti de ces 5 lieux différents. Encouragez-les à:
Cela les encouragera à vérifier leur travail avant qu'il ne soit rendu public à tout le monde, ce qui signifie qu'ils verront leurs erreurs plus tôt. Ils verront le commit et penseront: "Attends, ce n'est pas ce que je voulais", et contrairement à SVN, ils peuvent revenir en arrière et réessayer avant de pousser.
Une fois habitués à comprendre où se trouvent leurs modifications, ils peuvent alors décider quand ignorer les étapes et combiner certaines opérations (quand extraire parce que vous savez déjà que vous voulez extraire + fusionner ou quand cliquer sur cette option Valider / Publier). .
C’est en fait l’un des avantages énormes de git par rapport à SVN, et git est conçu avec ce schéma d’utilisation. SVN, en revanche, suppose un référentiel central, il n’est donc pas surprenant que les outils de git ne soient pas optimisés pour le même flux de travail. En SVN, si votre commit est incorrect, votre seul recours est un nouveau commit pour annuler l’erreur.
Cela mènera naturellement à la stratégie suivante:
Encouragez-les à utiliser des branches locales
En fait, les branches locales facilitent beaucoup le travail sur des fichiers partagés. Je peux faire tous les changements que je veux dans ma propre branche, et cela n'affectera personne, puisque je ne les encourage pas. Ensuite, le moment venu, je peux utiliser toutes les mêmes stratégies de fusion et de refonte, mais plus facilement:
- Je peux rebaser ma succursale locale, ce qui rend sa fusion en maître simple.
- Je pourrais utiliser une fusion simple (créer un nouveau commit) en maître pour y intégrer les modifications de ma branche locale.
- Je peux réduire la fusion de toute ma branche locale en un seul commit sur master si je pense que ma branche est trop difficile à sauver.
L'utilisation de branches locales est également un bon début pour élaborer une stratégie de branchement systématique. Il aide vos utilisateurs à mieux comprendre leurs propres besoins en matière de succursales. Vous pouvez donc choisir une stratégie en fonction des besoins et du niveau de compréhension / compétences de l'équipe et ne pas simplement utiliser Gitflow, car tout le monde en a entendu parler.
Sommaire
En bref, git n'est pas SVN et ne peut pas être traité comme tel. Tu dois:
- Éliminez la peur en encourageant l'expérimentation en toute sécurité.
- Aidez-les à comprendre en quoi git est différent pour qu'ils puissent voir en quoi cela modifie leur flux de travail normal.
- Aidez-les à comprendre les fonctionnalités disponibles pour les aider à résoudre leurs problèmes plus facilement.
Tout cela vous aidera à adopter progressivement une meilleure utilisation de git, jusqu'à ce que vous puissiez commencer à mettre en œuvre un ensemble de normes.
Caractéristiques spécifiques
Dans l'immédiat, les idées suivantes pourraient aider.
Rebase
Vous avez parlé de rebase et que vous ne comprenez pas vraiment cela dans votre question. Alors, voici mon conseil: essayez ce que je viens de décrire. Apportez des modifications localement pendant que quelqu'un d'autre les pousse. Commettez vos modifications localement . Zip votre répertoire de référentiel en tant que sauvegarde. Récupère les modifications de l'autre personne. Maintenant, essayez de lancer une commande rebase et voyez ce qu'il advient de vos commits! Vous pouvez lire des articles de blog sans fin ou recevoir une formation sur rebase et sur la façon dont vous devriez ou ne pas l'utiliser, mais rien de tout cela ne remplace le voir en direct. Alors essayez -le.
merge.ff=only
Celui-ci va être une question de goût personnel, mais je vais le recommander au moins temporairement car vous avez déjà mentionné que vous aviez déjà des problèmes avec la gestion des conflits. Je recommande de régler merge.ff
àonly
:
git config --global merge.ff only
"ff" signifie "avance rapide". Une fusion rapide s'effectue lorsque git n'a pas besoin de combiner les modifications de différents commits. Cela déplace simplement le pointeur de la branche vers un nouveau commit le long d'une ligne droite du graphique.
En pratique, cela empêche d'empêcher git de créer automatiquement des commits de fusion. Donc, si je commets quelque chose localement puis que je récupère les modifications de quelqu'un d'autre, au lieu d'essayer de créer une validation de fusion (et éventuellement de forcer l'utilisateur à gérer les conflits), la fusion échouera. En effet, git n'aura effectué qu'un fetch
. Lorsque vous n'avez pas d'engagement local, la fusion se déroule normalement.
Cela donne aux utilisateurs une chance de passer en revue les différents commits avant de tenter de les fusionner et les oblige à décider de la meilleure façon de les combiner. Je peux modifier la fusion, poursuivre la fusion (en utilisant git merge --no-ff
pour contourner la configuration) ou bien simplement différer la fusion de mes modifications pour le moment et la gérer plus tard. Je pense que ce petit ralentisseur aidera votre équipe à éviter de prendre de mauvaises décisions concernant les fusions. Vous pouvez laisser votre équipe la désactiver une fois qu’elle sera mieux à même de gérer les fusions.