Question

J'utilise TortoiseHg 0.5 (qui inclut Mercurial 1.0.2) sur Vista64. D'après le Livre Mercurial , Mercurial doit gérer les noms de fichiers dans une affaire manière non-sensible sur un système de fichiers insensible à la casse (tel que NTFS, qui est ce que je suis sur). Cependant, je trouve que mon installation de Mercurial est en fait sensible aux cas:

>hg status -A foo
C foo
>hg status -A FOO
? FOO

S'agit-il d'un bogue dans Mercurial, d'un bogue dans la version TortoiseHg de Mercurial ou est-ce autre chose? Comment puis-je gérer la gestion des noms de fichiers sans tenir compte de la casse depuis Mercurial sous Windows?

Était-ce utile?

La solution

Ce problème a été résolu dans Mercurial 1.1! De la notes de publication : " Amélioration du correctif le visage des systèmes de fichiers ".

Sous Windows, Mercurial ignore maintenant la casse dans ses arguments de ligne de commande:

>hg status -A foo
C foo
>hg status -A FOO
C foo

Et il est également conscient du fait que les modifications de nom de fichier impliquant uniquement la casse ne sont pas de nouveaux fichiers:

>ren foo FOO
>hg status -A fOO
C foo

Ainsi, il n'y a plus aucun risque de négliger les modifications dues aux fautes de frappe sur la ligne de commande.

Toutefois, sachez que le contenu du fichier .hgignore reste sensible à la casse. Ce problème ne se pose que si vous utilisez la syntaxe globale; avec la syntaxe regexp, vous pouvez mettre (? i) au début des motifs pour les rendre insensibles.

Autres conseils

Je pense que vous avez mal lu le livre. L’introduction de la section 7.7 décrit simplement les trois types différents de sensibilité à la casse existant dans les systèmes d’exploitation, sans indiquer que mercurial reflétera cette sémantique.

Plus loin dans la section 7.7.2 "Détection des conflits de cas", vous pourrez lire:

  

Lorsque vous travaillez dans l'ouvrage   répertoire, Mercurial honore le   politique de nommage du système de fichiers où   le répertoire de travail est situé. Si   le système de fichiers conserve la casse, mais   insensible, Mercurial traitera   noms qui ne diffèrent que dans le cas où le   même.

Lorsque vous effectuez hg status -A FOO , le processus en cours dans mercurial est le suivant:

  1. Vérifiez si un fichier existe dans le système de fichiers correspondant à l'argument de fichier, 'FOO' - et qu'il ne tient pas compte de la casse pour le moment. Il trouve donc 'foo' et dit: "Oui, j'ai un fichier".
  2. Vérifiez si le manifeste de fichier contient une entrée correspondant à l'argument de fichier, 'FOO', et qu'il n'y en a pas, le statut affiche alors un '?' disant que c'est un fichier sur le disque que hg ne suit pas

Pour mieux voir que mercurial ne se soucie pas du cas sur NTFS, essayez ces étapes:

  1. hg init
  2. ligne d'écho > Foo
  3. hg add Foo
  4. hg commit -m 'commis Foo'
  5. déplacez Foo pas-foo
  6. déplacez FOO non-foo
  7. statut hg

et vous devriez voir hg dire que rien n’a changé parce que la seule chose qui a changé est le cas que hg ignore pour vous.

Quand je fais la même chose sur Linux, je vois à la place:

! Foo
? FOO
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top