Ich habe Mercurial-Repositorys, die unter Apache mit mod_wsgi ausgeführt werden. In Repositorys sind alle Dateinamen in Windows-1251 codiert. Diese Codierung wird aus historischen Gründen verwendet: Sie wurden von svn in mercurial konvertiert. Windows-1251 ist die Standard-Windows-Codierung für das russische Gebietsschema.
Jetzt möchten Programmierer das Crucible- Tool zur Codeüberprüfung verwenden. Es kann keine Dateinamen in einer anderen Codierung als utf-8 unterschätzen. Also muss ich sie von Windows-1251 nach UtF-8 konvertieren. Weiß jemand, wie man das macht? Die Mercurial-Konvertierungserweiterung bietet keine Optionen zum Konvertieren von Codierungen.
hgweb.config:
[web]
#encoding = UTF-8
encoding = windows-1251
#allow_archive = gz, zip, bz2
allow_archive = zip
allow_push = *
push_ssl = false
[extensions]
[collections]
/data/mercurial = /data/mercurial
encoding = windows-1251
zuencoding = UTF-8
nur Dateinamen unlesbar gemacht. Dies liegt daran, dass sie in Windows-1251 gespeichert sind. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" entspricht dieser Einstellung.Antworten:
Sie haben Recht, dass die Konvertierungserweiterung dies derzeit nicht auf nette Weise unterstützt. Das heißt, Sie können es nicht bitten, von der Codierung X zur Codierung Y neu zu codieren . Sie können es jedoch bitten, die Dateien einzeln für Sie umzubenennen! Erstellen Sie zuerst eine Datei
rename.py
mit dem NamenDann renne
Dadurch wird Ihre Dateikarte erstellt. Sie können jetzt verwenden
um das Repository in ein neues Repository zu konvertieren. Im neuen Repository sieht es so aus, als ob die Dateien immer mit UTF-8-Dateinamen gespeichert wurden.
Hinweis: Die Dateinamen werden jetzt als UTF-8 im Repository gespeichert. Dies bedeutet, dass Kassen auf modernen Linux-Computern gut aussehen. Windows verwendet jedoch keine UTF-8-Dateinamen. Die FixUtf-8-Erweiterung muss verwendet werden, damit Mercurial die UTF-8-Dateinamen im laufenden Betrieb in UTF-16 konvertiert. Dadurch werden auch unter Windows lesbare Dateinamen erstellt.
Hinweis: Jeder muss das neue Repository neu klonen! Durch Ändern eines Teils des Verlaufs werden zwangsläufig auch alle Hashes der Änderungssätze geändert. Um dies zu erreichen, müssen Sie entweder
oder
In beiden Fällen funktioniert dies, da die Konvertierung deterministisch ist und Ihre Benutzer sie selbst ausführen können, wenn Python verfügbar ist. Wenn sie nur eine TortoiseHg-Installation haben, ist es wahrscheinlich am einfachsten, wenn Sie sie auf Ihrem Server konvertieren.
Ich habe versucht , die Konvertierungserweiterung direkter zu unterstützen, und habe einen Patch an die Mercurial-Mailingliste gesendet, um dies direkter zu unterstützen.
quelle
Ich hatte das gleiche Problem. Ich musste eine Reihe von Repositorys konvertieren, also schrieb ich ein Skript, das alle als Liste angegebenen Repositorys konvertiert.
Verwendung:
Sie können von meinem Repository bei BitBucket erhalten.
quelle
Nur Extraktion aus Mercurial Wiki FYI
So nehme ich an , nur in der Darstellung charset ändern
encoding =
kann die dicken tunWenn diese Annahme falsch ist (es ist immer möglich), versuchen Sie es mit der FixUtf8-Erweiterung . Lesen Sie den Abschnitt Korrigieren vorhandener Dateinamen aus der Readme- Datei sorgfältig
quelle
encoding = windows-1251
aufencoding = UTF-8
nur Dateinamen unlesbar gemacht. FixUtf8 hat auch nicht geholfen.AddDefaultCharset utf-8
in Apache. Eine andere Idee - ändern Sie WAMP in LAMP mit UTF8 als Gebietsschema und tun Sie nichts mit Dateinamen, sondern haben Sieencoding = UTF-8
wiederencoding = windows-1251
wurde festgelegt, weil sich die Daten bereits in dieser Codierung befanden.