Groß- und Kleinschreibung Dateinamen Handhabung in Mercurial
-
04-07-2019 - |
Frage
Ich bin mit TortoiseHg 0,5 auf Vista64 (die Mercurial 1.0.2 enthält). Mein Verständnis von der Mercurial Buch ist, dass Mercurial Dateinamen in einem Fall behandeln soll -insensitive Weise auf Groß- und Kleinschreibung Dateisystem (zB NTFS, das ist, was ich bin auf). Allerdings finde ich, dass meine Installation von Mercurial in der Tat ist empfindlich gegenüber Fall:
>hg status -A foo
C foo
>hg status -A FOO
? FOO
Könnte dies einen Fehler in Mercurial sein, um einen Fehler in der TortoiseHg Build von Mercurial, oder ist es etwas anderes? Wie kann ich Groß- und Kleinschreibung Dateinamen Handhabung von Mercurial unter Windows erreichen?
Lösung
Dieses Problem wurde in Mercurial 1.1 behoben! href="http://www.selenic.com/mercurial/wiki/index.cgi/WhatsNew#head-b1d1f9a535adb686d6e0a490e049261313f10d7d" aus dem Release Notes : „Improved Korrektheit im Gesicht von casefolding Dateisystemen“.
Unter Windows Mercurial ignoriert nun Fall in seine Befehlszeilenargumente:
>hg status -A foo
C foo
>hg status -A FOO
C foo
Und es ist auch bekannt, dass Dateinamen Änderungen, die nur Fall beinhalten keine neuen Dateien:
>ren foo FOO
>hg status -A fOO
C foo
So gibt es keine Gefahr mehr Änderungen mit Blick aufgrund mistypes auf der Kommandozeile.
jedoch bewusst sein, dass der Inhalt der Datei .hgignore sensiblen Fall bleiben Dies ist ein Problem nur, wenn Sie glob Syntax verwenden. mit regexp-Syntax können Sie (? i) zu Beginn von Mustern setzen, um sie unempfindlich zu machen.
Andere Tipps
Ich glaube, Sie die hgbook falsch gelesen. Das Intro zu Abschnitt 7.7 wird nur die Beschreibung die drei verschiedenen Arten von Groß- und Kleinschreibung, die in Oss vorhanden ist, nicht sagen, dass Mercurial diese Semantik spiegeln wird.
später in Abschnitt 7.7.2 'Erkennen Fall Konflikte' heißt es:
Beim Betrieb im Arbeits Verzeichnis, Mercurial ehrt die Namenspolitik des Dateisystems, wo das Arbeitsverzeichnis befindet. Wenn das Dateisystem Fall erhalten, sondern unempfindlich, Mercurial behandeln wird Namen, die nur im Fall unterscheiden sich die gleich.
Wenn Sie den Prozess zu tun hg status -A FOO
, die in Mercurial geschieht ist:
- Überprüfen Sie, ob eine Datei auf dem Dateisystem vorhanden ist das Dateiargument übereinstimmt, ‚foo‘, - und an diesem Punkt Fall ist es unempfindlich, so dass es ‚foo‘ findet und sagt: „Ja, ich habe eine Datei bekam“
- Überprüfen Sie, ob es einen Eintrag in der Manifest-Datei das Dateiargument übereinstimmt, ‚foo‘, und es ist nicht so Status zeigt ein ‚?‘ es ist eine Datei auf der Festplatte selbst, dass hg nicht verfolgt
Um besser sehen Mercurial nicht über Fall Pflege auf NTFS Sie die folgenden Schritte:
- hg init
- echo line> Foo
- hg hinzufügen Foo
- hg commit -m 'begangen Foo'
- bewegen Foo nicht-foo
- bewegen nicht-foo FOO
- hg status
und Sie sollten sehen, hg sagen, dass sich nichts geändert hat, weil das einzige, was sich geändert hat, der Fall ist, die hg für Sie ignoriert.
Wenn ich das gleiche tun auf Linux ich stattdessen sehen:
! Foo
? FOO