我只需要源树及其历史记录。我现在不关心要求/问题。我在命令行中玩了一下,以确定我是否可以获得主干和一些开发路径的更改包列表。我认为应该可以为每个更改包提取一个diff,并使用它来重放自git中第一次提交以来的所有更改。像这样:
您还可以使用检查点补充更改包(对我来说已经足够了)。
更简单的方法是签出CP并添加/提交到git。但是,你会忘记添加,删除,移动和重命名操作。
有谁知道如何从“si diff”获得统一的差异?那已经很有用了。
有什么想法吗?
EDIT2:
添加了一个答案,显示我实际上是如何进行迁移的......
答案 0 :(得分:9)
我无法发布我写的实际程序,因为我没有按照自己的时间这样做。但是,我可以发布我是如何做到的。使用任何脚本语言重做它应该很容易。 我编写的工具一次只迁移一个分支。我会告诉它我想要哪个分支(例如1.21.1)以及分支中的起始和结束修订(例如4和78将从1.21.1.4开始迁移到1.21.1.78的所有修订)。要将所有分支放在一个仓库中,我将提供用于导入的.git目录。
完成。
MKS对其字符串使用某种ASCII编码,而git通常使用UTF-8,因此在将元数据导入git(用户名,注释,标签等)时要注意问题。
如需更多分支,请执行以下操作:
还有一件事:“si”是MKS命令行工具。因此,您需要指定其完整路径或将其路径放入搜索路径。
答案 1 :(得分:7)
MKS Integrity的问题是所有所在的唯一存储库:
由于这些数据可以按照自己的进度独立发展,因此将它们全部导入到一个Git存储库中将是一个坏主意:您只能克隆所有 Git存储库的内容(即使你可以限制该克隆的深度) 这意味着您将获得所有文档,即使您只对代码感兴趣 MKS Integrity导出意味着首先定义许多Git存储库以充当submodules。
我只需要源树及其历史记录。
像往常一样,我建议只导入:
我不会全部导入一个 Git存储库,除非您确信所有源代表一个系统开发为全部(而不是几个“模块”开发)独立地)
更简单的方法是签出CP并添加/提交到git。
这将是继续进行的方式。
但是你会忘记添加,删除,移动和重命名操作。
没有!你不会! Git将infer those operations 这是文件Content VCS的优势。
答案 2 :(得分:6)
FWIW,si diff目前不支持统一差异。要求进行更改,但尚未有太多客户要求提供该功能。
免责声明:我为PTC(谁获得MKS)工作。
答案 3 :(得分:3)
这适用于检查站......
https://gist.github.com/2369049
不幸的是,检查站似乎是MKS唯一真正有用的东西 - > GIT,作为一个检查点真的是最接近GIT称之为“快照”的东西。
MKS有许多不兼容的概念(每个文件版本跟踪,分支不像GIT分支,检查点等),它们都可以彼此独立地进化,很难说如何将合理的历史迁移到GIT 。可能有很多方法可以做到,而且没有一种方法比下一种更“正确”。
那就是说,我很想听到一些好主意。 :)
我很想看到一个能够以合理的方式捕获每个文件版本的解决方案。在一些讨论中,我们抛出了尝试按提交时间或其他方式排列MKS每个文件版本的想法。这样我们就可以通过包含多个文件中的更改的提交来制定“repo”的概念。
答案 4 :(得分:0)
我使用此工具将更改包从MKS导入Mercurial,将其导入git应该非常相似;或者您可以先导入Mercurial,然后使用git工具导入Mercurial。
https://github.com/arsane/py-mks2hg.git
它将尝试查找指定项目下的所有更改包,并按顺序提交到新的Mercurial存储库。