是否可以将MKS Integrity存储库导入git?

时间:2009-08-21 21:02:52

标签: git version-control import mks mks-integrity

我只需要源树及其历史记录。我现在不关心要求/问题。我在命令行中玩了一下,以确定我是否可以获得主干和一些开发路径的更改包列表。我认为应该可以为每个更改包提取一个diff,并使用它来重放自git中第一次提交以来的所有更改。像这样:

  1. 首先提交并将其添加到git
  2. 获得下一个CP
  3. 获取CP的差异
  4. 将diff应用于git working dir
  5. 添加并提交对git的更改
  6. 重复(2.)直到最后一次CP
  7. 您还可以使用检查点补充更改包(对我来说已经足够了)。

    更简单的方法是签出CP并添加/提交到git。但是,你会忘记添加,删除,移动和重命名操作。

    有谁知道如何从“si diff”获得统一的差异?那已经很有用了。

    有什么想法吗?

    EDIT2:
    添加了一个答案,显示我实际上是如何进行迁移的......

5 个答案:

答案 0 :(得分:9)

我无法发布我写的实际程序,因为我没有按照自己的时间这样做。但是,我可以发布我是如何做到的。使用任何脚本语言重做它应该很容易。 我编写的工具一次只迁移一个分支。我会告诉它我想要哪个分支(例如1.21.1)以及分支中的起始和结束修订(例如4和78将从1.21.1.4开始迁移到1.21.1.78的所有修订)。要将所有分支放在一个仓库中,我将提供用于导入的.git目录。

  • 从开始修订到结束修订开始循环
    • CURRENTREV = BRANCH.loopcounter
    • 创建repo目录
    • 将.git目录移动到repo目录
    • 将.gitignore文件移至repo目录
    • chdir进入repo目录
    • 通过“si createsandbox -P MKS_PROJECT_PATH --yes --projectRevision = CURRENTREV
    • 在repo目录中创建mks沙箱
    • 通过“si viewprojecthistory --rfilter = range:CURRENTREV-CURRENTREV”获取修订说明,捕获输出!
    • 从以前的输出中提取用户,日期,标签,评论
    • “git add。”
    • 管道从上面提取信息到“git commit -qF - ”(如果你想要像检查点评论这样的多行,不能做-m)
    • 通过“si dropsandus --yes index.pj”
    • 删除沙箱
    • 将.git和.gitignore移动到保存位置(用于下一次迭代)
    • 删除沙盒目录中的所有剩余文件
    • 转到父目录(..)
    • 删除sandbox / repo dir
  • 创建最终的git dir
  • 将.git和.gitignore移动到最终的git dir
  • “git reset --hard HEAD”

完成。

MKS对其字符串使用某种ASCII编码,而git通常使用UTF-8,因此在将元数据导入git(用户名,注释,标签等)时要注意问题。

如需更多分支,请执行以下操作:

  • 在git目录中签出分支应该开始的修订并创建一个分支(“git checkout -b NEWBRANCHNAME”)
  • 现在将.git和.gitignore移动到保存位置并删除整个目录
  • 现在做与上面相同的事情

还有一件事:“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存储库。