2009-09-01 6 views
3

Nous avons un grand nombre de programmeurs sur différentes plates-formes utilisant tous CVS.terminaisons de ligne CVS

Nous avons les développeurs utilisant des fenêtres avec TortoiseCVS (qui utilise cvsnt)

Nous avons les développeurs utilisant ubuntu 8.04

Nous avons des développeurs qui ont deux boîtes Ubuntu et Windows.

Un large éventail d'éditeurs différents sont utilisés par différents développeurs sur différentes plates-formes.

Et nous avons d'énormes problèmes avec les fins de ligne. Ce qui se manifeste par une croissance continue du nombre de fins de ligne dans les fichiers. Maintenant, si je comprends bien, TortoiseCVS utilise cvsNT qui suppose que les fins de ligne UNIX dans le référentiel. Lorsque vous enregistrez, il convertit la fin de la ligne UNIX en fins de ligne Windows et lorsque vous validez, les extrémités des lignes Windows sont converties en fins de ligne UNIX.

Dans ubuntu, les clients cvs ne font pas de conversions car le référentiel doit être une terminaison de ligne UNIX et linux utilise également les fins de ligne UNIX.

Tout cela fonctionne bien à condition que tout le monde sur Windows utilise un client basé sur cvsNT. Et personne ne change leur OS. Malheureusement, les utilisateurs de boîtes Ubuntu et Windows basculent souvent et peuvent vérifier, éditer ou valider sur différents systèmes d'exploitation. Par conséquent, ils finissent par valider un fichier en utilisant le client Linux CVS qui a des fins de ligne Windows. Lorsque ceci est extrait à l'aide d'un client cvsNT sous Windows, le CRLF est converti en CRCRLF qui apparaît sous la forme de deux lignes. Plus cela se produit, plus de nouvelles lignes apparaissent dans le fichier.

Existe-t-il un moyen de convertir CVS sur Linux pour convertir n'importe quelle fin de ligne Windows en fin de ligne UNIX sur un commit pour éviter que cela ne se produise. De cette façon, le serveur CVS aura seulement des fins de ligne UNIX. Toute autre suggestion de moyens de surmonter cela est également la bienvenue.

Répondre

3

Une approche consisterait à exiger que l'équipe de développement applique les fins de ligne.

dos2unix et unix2dos sur linux et unix fonctionnent très bien. Cywgin sur Windows fournira une implémentation.

Vous pourriez avoir un script qui nettoie les fins de ligne que les gens courent avant Réintégrer.

Ma principale suggestion serait soit passer à un autre système de contrôle de version ou de désactiver la ligne magique se nourrit. Je n'ai jamais eu de conversion de flux de ligne magique pour moi et mes équipes de développement ont toujours eu un encodage standard. Cela n'a pas fonctionné parfaitement, mais ça a marché très bien.

Vous pouvez également écrire un script simple qui s'exécuterait dans un environnement d'intégration continue en recherchant les mises à jour qui augmentent les sauts de ligne. Vous pouvez ensuite rejeter la modification ou nettoyer le problème.

Bonne chance, Jacob

+0

Je trouve l'option CVSNT particulier particulièrement difficile à trouver, donc la voici: http://evscm.org/manual/html/Substitution-modes.html. – Leo

3

La seule raison pour laquelle je l'ai vu pour chambouler les fins de ligne avec CVS ​​est si vous copiez le fichier d'un OS à l'autre. Si vous faites cela, vous contournez manuellement le VCS. C'est évidemment demander des ennuis. Alors soit arrêtez de faire cela ou n'oubliez pas de nettoyer après vous.

Je ne connais pas un moyen de vérifier automagiquement ou même corriger cela dans CVS. Avez-vous envisagé de passer à SVN? Ses hooks de pré-commit pourraient être un moyen de le faire. OTOH, une fois que vous êtes dans le pays SVN, avec son soutien pour rapidement créer et détruire des branches privées, vous pouvez aussi ne plus contourner le VCS: créer une branche, sur une plate-forme vérifier vos changements sur cette branche, de l'autre plate-forme passer à cette branche, et continuer à travailler là. Répétez jusqu'à ce que terminé, fusionnez votre branche dans le tronc et supprimez-le. Pas de fouillis de fichiers d'une machine à l'autre derrière le dos du VCS. Une chose de moins à s'inquiéter.

+0

peut-être envisager de passer à git? Il y a maintenant un TortoiseGit aussi. –

+0

Je ne sais pas à propos de git. Je suis passé de CVS à SVN, cependant - plusieurs fois, en fait. Il y a rarement une différence, sauf que tout commence à fonctionner comme il aurait toujours dû l'être. Je suppose que le passage à git est un peu plus, um, _different_? – sbi

0

Vous pouvez utiliser l'option de commande générale "--lf" pour forcer la fin d'une ligne unix.

Par exemple: cvs --lf jusqu'à