我有很多 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 吗?