在Atlassian Bitbucket中从Mercurial切换到GIT,并用西里尔文保存文件

背景知识


夏季,BitBucket官方博客上发布了官方博客文章,宣布不再支持Mercurial存储库。

水星的停产将分两个阶段进行:

  1. 从2020年2月1日开始,用户将不再能够创建新的存储库。
  2. 从2020年6月1日开始,用户将无法在Bitbucket中或通过其API使用Mercurial函数,并且将删除所有Mercurial存储库。

做出此决定的原因或多或少很清楚,但是在我的工作中,我使用了几个关于Mercurial的存储库(我一直都比较喜欢Mercurial,但是我将把这个问题放在本文的范围之内),我需要将其转换为GIT。

其实,这个地方开始...

问题


BitBucket的开发人员和支持服务为这种转换提供了几种选择,我都尝试了所有这些,同时我尝试了第三方工具,例如将存储库导入GitHub。

原来,所有这些工具破坏了包含西里尔字母的字符的文件和目录的名称,而我有很多这样的文件(TK,规范和其他类似文件)。 有趣的是,包含西里尔字母的注释可以很好地容忍并在迁移后显示。

我在Internet上发现,Mercurial中有一些工具(存储库配置文件中的键)可以让您控制默认字符编码,但首先,它们仅被明确包含,其次,没有工具可以转换现有存储库。 嗯,我没有检查此选项对使用现成工具进行的迁移有何帮助-现在采取这种方式为时已晚。

不需要手动搜索问题文件并进行手动填充,因此我不得不花点时间寻找解决方案。

也许,传输带有文件名中俄语字符的存储库对某人也很重要,而我的文章将节省一些时间。

解决方案


基本程序


  1. 选择git@github.com存储库:seewindcn / tortoisehg.git-它具有一个fixutf8插件,该插件不在主发行版中。 进一步假定本地副本将位于目录D中:\ Development \ tortoisehg
  2. 制作您的 Mercurial存储库的副本,以免损坏主要位置。 此外,所有命令都在复制目录中执行。
  3. 使用命令D纠正文件和目录名称:\ Development \ tortoisehg \ hg.exe addremove -s 100
  4. 提交到存储库D:\ Development \ tortoisehg \ hg.exe commit -m“修复文件名”
  5. 打开hggit插件-在您需要添加的.hg \ hgrc文件中
    [扩展名]
    hggit =
  6. 准备转换为GIT-使用命令D创建一个主标签:\ Development \ tortoisehg \ hg.exe书签-r默认主
  7. 在BitBucket中创建GIT存储库
  8. 我们提交给hg push git + ssh仓库://git@bitbucket.org:<user> / <reponame> .git请注意 ,它使用常规的hg,因为来自seewindcn的克隆不想在SSH上工作)
  9. 我们在BitBucket网站上检查,确保西里尔文文件名不中断
  10. 我们将GIT存储库克隆到我们自己,检查文件名,对所有文件进行字节比较,构建项目,测试
  11. 构建之后,GIT可能会建议提交大量新文件。 .hgignore文件将必须手动转换为.gitignore。 幸运的是,您可以执行一次此操作,并将一个文件用于所有其他存储库。

结果,我们设法将原始Mercurial存储库的主要默认分支与整个提交历史一起转移到了GIT存储库的主数据库中,甚至带有标签。 在这些缺点中,我注意到在提交历史中完全没有关于西里尔字母的文件更改的信息-有提交,甚至没有引用西里尔字母的文件(当然,其余文件顺序完美)。

通常,可以认为任务已完成,但是出于体育兴趣,转移剩余的分支对我来说也很有趣。

分支换行,默认除外


  1. 获取分支列表hg分支
  2. 对于每个分支
    1. 切换到hg up <branchname>分支
    2. 创建标签(标签名称不得与分支名称匹配): hg书签-r <hgbranchname> <gitbranchname>
    3. 将分支倒入GIT hg push git@bitbucket.org:<user> / <reponame> .git

分支的名称也可能包含西里尔字母,在这种情况下,hg分支将显示krakozyabry。 在这种情况下,我使用了可视的hg工作台-切换到分支并在此处创建标签。

至此完成风水。

如果有人有兴趣深入挖掘,那我就离开...

参考文献清单


Source: https://habr.com/ru/post/zh-CN483454/


All Articles