Domanda

Sto usando TortoiseHg 0.5 (che include Mercurial 1.0.2) su Vista64. La mia comprensione dal Mercurial Book è che Mercurial dovrebbe gestire i nomi dei file in un caso -sensibilità su un filesystem senza distinzione tra maiuscole e minuscole (come NTFS, che è quello su cui sto lavorando). Tuttavia trovo che la mia installazione di Mercurial sia in effetti sensibile al caso:

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

Potrebbe essere un bug in Mercurial, un bug nella build di Mercurial di TortoiseHg, o è qualcos'altro? Come posso ottenere la gestione dei nomi dei file senza distinzione tra maiuscole e minuscole da Mercurial su Windows?

È stato utile?

Soluzione

Questo problema è stato risolto in Mercurial 1.1! Dalle note sulla versione : " Miglioramento della correttezza nelle faccia dei filesystem casefolding " ;.

Su Windows, Mercurial ora ignora il caso nei suoi argomenti della riga di comando:

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

Ed è anche consapevole del fatto che le modifiche al nome file che coinvolgono solo il caso non sono nuovi file:

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

Quindi non c'è più alcun rischio di trascurare i cambiamenti a causa di errori nella riga di comando.

Tuttavia, tieni presente che i contenuti del file .hgignore mantengono la distinzione tra maiuscole e minuscole. Questo è un problema solo se stai usando la sintassi glob; con la sintassi regexp puoi mettere (? i) all'inizio dei pattern per renderli insensibili.

Altri suggerimenti

Penso che tu abbia letto male l'hgbook. L'introduzione alla sezione 7.7 sta solo descrivendo i tre diversi tipi di distinzione tra maiuscole e minuscole esistenti nei sistemi operativi, senza dire che mercurial rispecchierà quella semantica.

Più avanti nella sezione 7.7.2 'Rilevamento di conflitti di casi' si dice:

  

Durante il lavoro   directory, Mercurial onora il   politica di denominazione del filesystem dove   la directory di lavoro si trova. Se   il filesystem sta preservando il caso, ma   insensibile, Mercurial tratterà   nomi che differiscono solo nel caso in cui   stesso.

Quando fai hg status -A FOO il processo che sta avvenendo all'interno di mercurial è:

  1. Controlla se sul file system esiste un file che corrisponde all'argomento file, "FOO", - e a questo punto non fa distinzione tra maiuscole e minuscole, quindi trova "pippo" e dice "sì, ho un file"
  2. Controlla se nel file manifest c'è una voce che corrisponde all'argomento del file, "FOO", e non lo è, quindi lo stato mostra un "?" dicendo che è un file su disco che hg non sta monitorando

Per vedere meglio che a Mercurial non interessa il caso su NTFS, provare questi passaggi:

  1. hg init
  2. echo line > Foo
  3. hg aggiungi Foo
  4. hg commit -m 'commit Foo'
  5. sposta Foo non-foo
  6. sposta FOO non-foo
  7. hg status

e dovresti vedere hg dire che nulla è cambiato perché l'unica cosa che è cambiata è il caso che hg ti sta ignorando.

Quando faccio la stessa cosa su Linux invece vedo:

! Foo
? FOO
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top