1

我有很多 mercurial 存储库,我尝试将它们转换为 git repo。我使用了快速导出 https://github.com/frej/fast-export ,一切都很好,但是我的一些 mercurial repo 有带有俄语字母的文件。
这是一个巨大的存储库,大约有 20k 提交和许多分支

在 ubuntu 上看起来像

docs/
|-- Android
|-- DataContracts
|-- \302\345\355\344\356\360\373
|-- \304\340\362\340\312\356\355\362\360\340\352\362\373
|-- \310\355\361\362\360\363\352\366\350\350
|-- \310\361\365\356\344\355\340\377\ \344\356\352\363\354\345\355\362\340\366\350\377
|-- \317\360\356\362\356\352\356\353\373
`-- \320\345\353\350\347\355\340\377\ \344\356\352\363\354\345\355\362\340\366\350\377

在 Windows 上看起来很正常

Get-ChildItem .\docs\


    Каталог: C:\temp\mercurial\Ptk\docs


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----       12.01.2021     10:11                Android
d-----       12.01.2021     10:11                DataContracts
d-----       12.01.2021     10:11                Вендоры
d-----       12.01.2021     10:11                ДатаКонтракты
d-----       12.01.2021     10:11                Инструкции
d-----       12.01.2021     10:11                Исходная документация
d-----       12.01.2021     10:11                Протоколы
d-----       12.01.2021     10:11                Релизная документация
-a----       03.03.2021     12:30              0 Вендоры2

在 docs 文件夹中,我有许多 word、pdf 和其他格式的文档

起初我试图用命令转换

~/mercurial/fast-export/hg-fast-export.sh -r ~/mercurial/Ptk -fe ISO-8859-1 但转换字符后被破坏

接下来我尝试重命名我的仓库中的所有文件 https://serverfault.com/questions/319070/mercurial-convert-filename-encoding

import sys
for path in sys.stdin:
    old = path[:-1] # strip newline
    new = old.decode("cp1251").encode("utf-8")
    print 'rename "%s" "%s"' % (old, new)

$ hg 清单 --all | python rename.py > rename.txt 输出是

rename ".gitignore" ".gitignore"
rename ".hgignore" ".hgignore"
rename ".hglf/docs/����������/��������� ������������� ��� �� �������/files/android_root.exe" ".hglf/docs/Инструкции/Первичная инициализация ПТК из коробки/files/android_root.exe"
Traceback (most recent call last):
  File "rename.py", line 4, in <module>
    new = old.decode("cp1251").encode("utf-8")
  File "/usr/lib/python2.7/encodings/cp1251.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 12: character maps to <undefined>

我尝试使用其他解码 cp1252

file -ib docs/*

输出

inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary
inode/directory; charset=binary

接下来我尝试使用 tortoisehg https://tortoisehg.bitbucket.io/进行转换

hg bookmark -r default master
"C:\Program Files\TortoiseHg\hg.exe" push c:\temp\mercurial\converted-repo

转换字符后被破坏

我不想从我的存储库中删除任何文档,因为不仅 repo 中包含俄语字符的文档,而且我还有包含俄语字符的源文件,不要问为什么 :)

您能给我建议如何将其转换为 git repo 吗?

4

0 回答 0