我只需要源树及其历史记录。我现在不关心需求/问题。我用命令行玩了一下,看看是否可以获得主干和一些开发路径的更改包列表。我认为应该可以为每个更改包提取差异,并使用它来重放自 git 中第一次提交以来的所有更改。像这样的东西:
- 获取第一个提交并将其添加到 git
- 获取下一个CP
- 获取 CP 的差异
- 将 diff 应用于 git 工作目录
- 添加并提交更改到 git
- 重复(2.)直到最后一个CP
您还可以用检查点替换更改包(对我来说就足够了)。
一种更简单的方法是仅签出 CP 并添加/提交到 git。但随后您将无法跟踪添加、删除、移动和重命名操作。
有谁知道如何从“si diff”获得统一差异?那已经有很大帮助了。
有任何想法吗?
Edit2:
添加了一个答案,显示我实际上是如何进行迁移的......
我无法发布我编写的实际程序,因为我不是在自己的时间里完成的。不过,我可以发布我是如何做到的。使用任何脚本语言重做它应该很容易。
我编写的工具一次仅迁移一个分支。我会告诉它我想要哪个分支(例如 1.21.1)以及分支中的开始和结束修订(例如 4 和 78 将迁移从 1.21.1.4 开始到 1.21.1.78 的所有修订)。为了将所有分支都放在一个存储库中,我将提供 .git 目录以用于导入。
- begin loop from starting revision to ending revision
- CURRENTREV=BRANCH.loopcounter
- 创建存储库目录
- 将 .git 目录移动到 repo 目录中
- 将 .gitignore 文件移动到 repo 目录中
- chdir 进入 repo 目录
- 通过“si createandbox -P MKS_PROJECT_PATH --yes --projectRevision=CURRENTREV”在 repo 目录中创建 mks 沙箱
- 通过“si viewprojecthistory --rfilter=range:CURRENTREV-CURRENTREV”获取修订描述,捕获输出!
- 从之前的输出中提取用户、日期、标签、评论
- “git 添加。”
- 将上面提取的信息通过管道传输到“git commit -qF -”(如果您想要像检查点注释这样的多行,则不能执行 -m )
- 通过“si Dropsandbox --yes index.pj”删除沙箱
- 将 .git 和 .gitignore 移动到保存位置(用于下一次迭代)
- 删除沙箱目录中所有剩余文件
- 移至父目录 (..)
- 删除沙箱/repo目录
- 创建最终的 git 目录
- 将 .git 和 .gitignore 移动到最终的 git 目录
- “git重置——硬头”
Done.
MKS 对其字符串使用某种 ASCII 编码,而 git 通常使用 UTF-8,因此在将元数据(用户名、评论、标签等)导入到 git 时请注意问题。
对于更多分支,请执行以下操作:
- 在 git 目录中签出分支应启动的修订版本并创建分支(“git checkout -b NEWBRANCHNAME”)
- 现在将 .git 和 .gitignore 移动到保存位置并删除整个目录
- 现在做与上面相同的事情
还有一件事:“si”是 MKS 命令行工具。因此,您要么需要指定其完整路径,要么将其路径放入搜索路径中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)