9
votes

Peut-on faire git-svn pour gérer le CRLF comme des clients de subversion native?

J'ai un référentiel Subversion hébergé sur Linux mais jamais accédé aux clients via Windows, car il s'agit de la source d'une grande application Windows.

Ce serait génial si je pouvais travailler sur ce référentiel à l'aide de GIT-SVN (fourni par MSYSGIT).

Je vais avoir un diable d'une dizaine à essayer d'obtenir le référentiel de ne pas se mettre en carton sur les fins de la ligne de style Windows.

Après svn clone une caisse du référentiel git avec:

  • core.autocllf = true montre des modifications à n'importe quel fichier qui utilisent réellement lf dans le référentiel.
  • core.autocllf = Entrée Affiche des modifications à n'importe quel fichier qui utilise réellement lf dans le référentiel.
  • core.autocllf = false montre des modifications à tout.

    Quelle est la meilleure option ici? Dois-je utiliser core.autocllf = true et validez le lf à CRLF modifications des fichiers affectés?

    Je suis très proche de jeter dans la serviette et de mettre ma section de travail de subversion dans un référentiel Git. Ce serait une solution médiocre mais permettrait au moins de permettre aux branches et aux catastrophes locales. Cela deviendra évidemment une énorme douleur pour continuer à ajouter des fichiers lorsqu'ils sont ajoutés à la subversion.

    EDIT: pour ceux qui sont intéressés. git-svn est une douleur royale si vous êtes sous Windows. La réponse de Hasen J ci-dessous est probablement la bonne mais je ne peux pas suivre ses conseils sans attirer l'Ire des autres développeurs de mon équipe.

    Je vais essentiellement abandonner cette question puisqu'elle n'allait pas conduire à un résultat raisonnable. Espérons que le prochain google Summer of Code attirera quelqu'un qui souhaite ramasser leur projet "Supeon GIT-SVN SUPPORT SUR WINDOWS". Voir http://git.or.cz/gitwiki/soc2009ideas#propergit-svnsupportonwindows


1 commentaires

Eh bien je suis vraiment dérouté. J'ai commencé à essayer de résoudre ce problème, mais la vitesse lente du clone SVN sur Windows m'a fait commencer à le faire sous Linux. J'ai apporté à Repo to Windows puis handicapé CRLF et j'ai réinitialisé. Maintenant, je semble avoir un référentiel de git-svn de travail qui se comporte correctement ... Maintenant, pour déterminer quelles mesures sont en réalité nécessaires pour faire ce travail tout le temps ... j'espère que cela a vraiment travaillé et je ne courais pas dans des problèmes comme je commence En l'utilisant.


6 Réponses :


1
votes

J'ai eu un problème similaire. Pour le résoudre, après le clone Git-Svn, j'ai appliqué UNIX2DOS à tous les fichiers car, dans mon cas, tous les fichiers du SVN Repo utilisé CRLF. Donc, je suppose que vous devriez essayer la conversion CRLF-LF manuellement juste après Git-svn.


2 commentaires

Cela semble être ma meilleure option pour l'instant. Je peux utiliser la sortie de "Statut GIT" pour répertorier les fichiers modifiés et exécuter ces via un script pour "résoudre" eux. Réglage "core.filemode = false" et une "réinitialisation GIT --Hard" était nécessaire pour remettre les choses à la manière dont ils auraient vraiment dû être. Kludgy, mais il semble avoir fait l'affaire.


En fait, cela semble toujours contrarier le diff de Git. Je retourne dans mon plan d'origine moins attrayant de simplement mettre ma copie de travail dans un référentiel Git.



0
votes

Normalement, vous voudriez définir le OPTION CORE.AUTOCLLF comme si tellement : xxx

mais selon Cet article , on dirait qu'il ne joue pas bien avec Git-SVN spécifiquement. Cela vaut peut-être une photo dans une seconde copie sûre de votre référentiel SVN pour voir si cela fonctionne.


0 commentaires

1
votes

Je nettoie habituellement mon clone git-svn avec filtre-filtre-filtre sur recode dons..fascui -f . (Cela a également aidé latin1..utf8 conversion, également.)


1 commentaires

Mais cela ne détruit pas l'histoire de l'annotation de Git? Je crois que j'ai un problème similaire à l'OP, je crois et que "fixer" manuellement des fichiers après le clone signifie que j'écris dans toute l'histoire de ces fichiers, ce qui le rend inutile.



6
votes

Faites-vous une faveur et ne plaisante pas avec des fins de ligne, gardez-les comme. Définir autocrilf sur false .

Un éditeur de texte semi-décent sous Windows doit être capable de gérer les fins de la ligne de style UNIX.

core.autocllf = FALSE montre les modifications à tout.

Je pense que si vous ne faites que cela après le fait , cela ne vous fera aucun bien.

Vous devez supprimer ce référentiel, définissez AUTOCLLF sur FALSE, puis faire le clone.


4 commentaires

Malheureusement, des éditeurs décents n'incluent pas tous ceux qui sont nécessaires pour construire le projet. Stupide, mais c'est un objet immeuble pour le moment. J'ai expérimenté avec différents paramètres avant le clone, y compris le clone sur une machine Linux. Je ne pouvais toujours pas obtenir des choses dans un état où l'ONG ou les outils de construction n'ont pas causé trop de choses à être marquées comme modifiées lorsque seules les terminaisons de ligne étaient affectées. Je vais vous donner un uppot, car il semble que cela fonctionnerait pour la plupart des gens.


Dans ce cas, convertissez toutes les lignes de ligne en CRLF et s'engagez dans le référentiel principal SVN.


Apparemment, cela ne sera pas autorisé. Signe.


C'est vraiment une solution valide pour travailler avec GIT-SVN, si les référentiels SVN stockent les fichiers avec CRLFS (développementale Unter Windows).



1
votes

Étant donné que mon autre réponse ne s'applique pas bien à vous, voici une autre façon de faire face à la situation:

utiliser à la fois SVN et Git; dans le même répertoire de travail.

Vous travaillerez principalement avec GIT, tirant du référentiel en amont, en faisant des changements locaux, des branches locales, etc. Tout ce que vous faites normalement lorsque vous travaillez sur un projet GIT local.

Ensuite, lorsque vous souhaitez vous engager dans le Rappo central SVN, utilisez le client SVN.

J'ai eu une certaine expérience en faisant cela, seulement je ne ferais pas un svn commet , mais créer un patch avec svn diff et le soumettre (puisque je n'avais pas commettre l'accès de toute façon).


2 commentaires

C'est arrêter une idée intelligente. Je vais expérimenter avec ça.


À la fin, j'ai fini par utiliser un référentiel git totalement local et effectuez des mises à jour (à la branche Master GIT) et s'engage à la répétition à distance à l'aide de SVN. Je ne reçois pas une histoire locale très utile, mais je reçois des branches de fonctionnalité et une autre gentillesse git de cette façon. Espérons-le, à l'avenir, j'aurai un peu de temps pour essayer de réparer ce qui est vraiment faux avec Git-Svn.



0
votes

Un autre bien conversations ici sur noyau .Autocllf .


1 commentaires

Je ne pense pas que cela aide avec le problème git-svn. Il y a quelque chose d'idiot à l'intérieur là-bas qui rend une douleur à la caisse utilisable.