Saya memiliki repositori Mercurial yang berjalan di Apache dengan mod_wsgi. Repositori memiliki semua nama file yang dikodekan di windows-1251. Pengkodean ini digunakan karena alasan historis: mereka dikonversikan menjadi mercurial from svn, windows-1251 adalah pengodean windows default untuk lokal Rusia.
Sekarang programmer ingin menggunakan alat Crucible untuk review kode. Itu tidak dapat menurunkan nama file dalam pengkodean selain dari utf-8. Jadi saya perlu mengubahnya dari windows-1251 ke utf-8. Adakah yang tahu bagaimana melakukan ini? Ekstensi konversi Mercurial tidak memiliki opsi untuk mengkonversi pengkodean.
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
keencoding = UTF-8
membuat nama file tidak dapat dibaca. Ini karena mereka disimpan di windows-1251. "UTF-8" os.environ ["HGENCODING"] = "UTF-8" sama dengan pengaturan ini.Jawaban:
Anda benar bahwa ekstensi konversi tidak mendukung ini dengan cara yang baik saat ini. Artinya, Anda tidak bisa meminta untuk recode dari pengkodean X untuk pengkodean Y . Namun, Anda dapat memintanya untuk mengganti nama file satu per satu untuk Anda! Pertama buat file yang disebut
rename.py
denganLalu lari
Ini menciptakan peta file Anda. Anda sekarang dapat menggunakan
untuk mengubah repositori menjadi repositori baru. Dalam repositori baru, itu akan terlihat seperti file selalu disimpan menggunakan nama file UTF-8.
Catatan: Nama file sekarang disimpan sebagai UTF-8 di repositori. Ini berarti bahwa checkout akan terlihat bagus di mesin Linux modern. Windows, bagaimanapun, tidak menggunakan nama file UTF-8. The ekstensi FixUtf-8 harus digunakan untuk membuat Mercurial mengkonversi UTF-8 nama file ke UTF-16 dengan cepat. Ini juga akan membuat nama file yang dapat dibaca di Windows.
Catatan: Semua orang harus mengkloning repositori baru! Mengubah bagian mana pun dari riwayat pasti akan mengubah semua hash perubahan juga. Jadi untuk melakukan ini, Anda harus melakukannya juga
atau
Apa pun cara kerjanya karena konversi bersifat deterministik sehingga pengguna Anda dapat menjalankannya sendiri jika mereka memiliki Python. Jika mereka hanya memiliki instalasi TortoiseHg, maka mungkin paling mudah jika Anda mengonversinya di server Anda.
Saya melihat membuat ekstensi ekstensi ini menjadi lebih langsung dan telah mengirim patch ke milis Mercurial untuk mendapatkan lebih banyak dukungan langsung untuk ini.
sumber
Saya memiliki masalah yang sama. Saya perlu mengonversi banyak repositori, jadi saya menulis skrip yang mengubah semua repositori yang diberikan sebagai daftar.
pemakaian:
Anda bisa dapatkan dari repositori saya di BitBucket.
sumber
Hanya ekstraksi dari Mercurial Wiki FYI
Jadi, saya kira, hanya mengubah presentasi charset di
encoding =
dapat melakukan yang tebalJika asumsi ini salah (selalu mungkin), coba Ekstensi FixUtf8 , baca bagian Memperbaiki nama file yang ada dari readme dengan hati-hati
sumber
encoding = windows-1251
keencoding = UTF-8
membuat nama file tidak dapat dibaca. FixUtf8 tidak membantu juga.AddDefaultCharset utf-8
di Apache. Gagasan lain - ubah WAMP ke LAMP dengan UTF8 sebagai lokal dan jangan lakukan apa-apa dengan nama file tetapi milikiencoding = UTF-8
lagiencoding = windows-1251
ditetapkan karena data sudah ada dalam pengkodean ini.