Pergunta

Eu estou usando TortoiseHg 0.5 (que inclui Mercurial 1.0.2) em Vista64. Meu entendimento do Mercurial Livro é que Mercurial deve lidar com nomes de arquivos em um caso forma -insensitive em um sistema de arquivos de maiúsculas e minúsculas (como NTFS, que é o que eu estou diante). No entanto eu acho que a minha instalação do Mercurial é de fato sensível ao caso:

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

Poderia ser este um bug no Mercurial, um erro na compilação TortoiseHg de Mercurial, ou é outra coisa? Como posso conseguir case-insensitive manipulação do Mercurial no Windows filename?

Foi útil?

Solução

Este problema foi resolvido no Mercurial 1.1! A partir dos notas de lançamento : "correção melhorada na cara de casefolding sistemas de arquivos".

No Windows, Mercurial agora ignora caso em seus argumentos de linha de comando:

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

E também está ciente de que mudanças de nome de arquivo que envolvem apenas caso não são novos arquivos:

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

Assim, não há mais qualquer risco de negligenciar mudanças devido à mistypes na linha de comando.

No entanto, estar ciente de que o conteúdo do arquivo hgignore permanecem maiúsculas e minúsculas Esta é uma questão somente se você está usando a sintaxe glob.; com a sintaxe regexp você pode colocar (? i) no início dos padrões para torná-los insensíveis.

Outras dicas

Eu acho que você interpretou mal a hgbook. A introdução para a seção 7.7 está apenas descrevendo os três tipos diferentes de sensibilidade caso que existem em OSs, não dizendo que mercurial irá espelhar essas semântica.

Mais tarde, na seção 7.7.2 'Detectar conflitos de caso' diz:

Quando estiver operando no trabalho diretório, Mercurial homenageia o nomeando a política do sistema de arquivos onde o diretório de trabalho está localizado. E se o sistema de arquivos é caso preservar, mas insensível, Mercurial tratará nomes que diferem apenas no caso como o mesmo.

Quando você faz hg status -A FOO o processo que está acontecendo dentro de mercurial é:

  1. Verifique se existe um arquivo no sistema de arquivos correspondente ao argumento do arquivo, 'FOO', - e neste momento é ser insensível caso para que ele encontra 'foo' e diz: "Sim, eu tenho um arquivo"
  2. Verifique se há uma entrada no manifesto de arquivo correspondente ao argumento do arquivo, 'FOO', e não há, portanto, status mostra um '?' dizendo que é um arquivo no disco que hg não está rastreando

Para ver melhor mercurial não se importar sobre o caso em NTFS tente estas etapas:

  1. hg init
  2. echo line> Foo
  3. hg adicionar Foo
  4. hg commit -m 'comprometida Foo'
  5. move Foo não-foo
  6. movimento não-foo FOO
  7. status de hg

e você deve ver hg dizendo que nada mudou, porque a única coisa que mudou é o caso que hg está ignorando para você.

Quando eu faço a mesma coisa em linux I vez ver:

! Foo
? FOO
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top