Je suis en train de faire un point sur le déplacement de cette boutique .NET de svn vers git, et j'ai identifié certains problèmes auxiliaires pour lesquels j'aimerais avoir une solution avant de basculer le commutateur.
Celui que je demande en particulier dans cette question est l'application de la fin de ligne. Par défaut, git pour Windows s'installe avec le 'checkout crlf, commit lf', qui ne fonctionnera pas pour un tas de sources qui (à ma connaissance) sont exclusivement composées de terminaisons crlf.
Je ne sais pas si je ferais aveuglément confiance à un développeur donné pour configurer correctement cette instruction, même si je donne une instruction (ou les deux), mais je suis curieux de savoir si quelqu'un ici a choisi une autre voie.
- Un hook de pré-validation qui vérifie les fins de ligne lf (ou peut-être toutes les fins de ligne lf) et les rejette dans cet événement.
- Un script d'installation distribué aux développeurs qui remplit la configuration globale avec le «tel quel, tel quel».
PS En écrivant ceci, il m'est venu à l'esprit que la conversion initiale de svn en git pouvait valider la manière par défaut et aussi longtemps que les gens s'en tiendraient à la valeur par défaut, ce serait également assez transparent. Ayant été un développeur utilisant git dans une boutique .NET qui a installé git avec le `` tel quel, tel quel '' par défaut, j'ai également créé mes propres problèmes (ils avaient tous roulé par défaut avant mon arrivée) . Je penche donc toujours vers une sorte de mécanisme d'application.
Réponses:
Pour répondre à la question de savoir comment appliquer quelque chose localement, vous ne pouvez pas sans faire de gros efforts pour gérer et appliquer l'état de chaque poste de travail de développeur, et je suis généralement d'avis que les développeurs devraient probablement être des administrateurs locaux de leur développement. parce que s'ils ne le sont pas, ils passeront simplement leur temps à comprendre comment obtenir ces privilèges de toute façon.
Et c'est probablement parce que vous ne devriez pas avoir à vous soucier de l'état de la configuration locale lorsque vous utilisez le contrôle de version distribué. Vous ne devez vous soucier que de l'état de votre configuration. En supposant que vous utilisez git comme système de contrôle de version centralisé, parce que c'est ce que tout le monde fait de toute façon parce que c'est le plus simple, alors supposons simplement que "votre" configuration est la copie de code enregistrée sur le serveur central.
Si tel est le cas, vous ne devriez pas accepter les fusions qui, comme vous l'avez mentionné, rompent les fins de ligne crlf / lf. Donc, vous appliquez cela quand un autre client essaie de pousser les changements avec une logique côté serveur qui rejette la demande de polluer votre référentiel avec leurs choix stylistiques potentiellement cassants.
la source
Nous avons besoin d'un processus d'examen utilisant les demandes Pull dans github sur nos principales branches de développement ou de master. Au cours de ce processus d'examen, nous marquerons les demandes d'extraction comme nécessitant des modifications si de nombreux fichiers présentent des différences d'espace blanc ou de fin de ligne, et insistons pour qu'elles suivent le formatage de la branche de développement ou principale pour laquelle elles effectuent la demande d'extraction.
Il existe également de bons outils en fonction des langues que vous utilisez et des outils CI que vous utilisez, qui peuvent, au cours du processus de génération ou de l'étape de demande d'extraction, formater automatiquement le code en fonction des règles que vous avez définies. Cela permet également de garder le code cohérent et de minimiser les problèmes de formatage lors de la validation du code.
la source
Vous pouvez utiliser la configuration par référentiel pour remplacer la configuration de l'utilisateur par référentiel. Une fois effectué sur le référentiel considéré comme la source centrale, il doit se propager avec les clones et être transféré vers d'autres dépôts, y compris locaux, remplaçant ainsi de manière centrale la configuration locale.
Vous pouvez en outre appliquer cela via des hooks dans votre référentiel central pour vérifier que les fins de fichier sont bien ce qu'elles sont censées être et rejeter la fusion / push si elle n'est pas casher. Cependant, ces hooks ne seront pas clones avec le référentiel, du moins pas directement, mais ce n'est pas nécessaire car les règles n'ont vraiment besoin d'être appliquées que sur le référentiel central.
En utilisant des modèles dans votre git init, vous pouvez vous assurer que vos dépôts sont créés égaux à tous les fichiers gitignore, gitattributes, etc. exactement comme vous le souhaitez.
Dernière chose, pas directement liée à votre question, j'ai trouvé le plus gros point de friction lors de la prise de l'équipe svn saavy à un flux de travail basé sur git quoi les habituer au repo supplémentaire au milieu. J'ai trouvé que cette feuille de repère visuelle aidait à expliquer un peu quelle commande avait quel effet pour quelle partie.
J'espère que cela a aidé un peu.
la source