我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我希望迁移到 GitHub,并且真的很想保留我们 8 年多的历史。
是否有其他人成功完成此迁移并愿意分享他们的工具/流程?
现在,假设以前没有这样做过,我想我正在考虑fast-import
使用 SourceAnywhere SDK 或命令行客户端编写一个 git 脚本。作为 git 新手,是否有任何现有的脚本或资源可以指导我作为起点?
我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我希望迁移到 GitHub,并且真的很想保留我们 8 年多的历史。
是否有其他人成功完成此迁移并愿意分享他们的工具/流程?
现在,假设以前没有这样做过,我想我正在考虑fast-import
使用 SourceAnywhere SDK 或命令行客户端编写一个 git 脚本。作为 git 新手,是否有任何现有的脚本或资源可以指导我作为起点?
我终于清理了我的项目并将其添加到 GitHub。你可以在这里找到它:SAWHtoGit。
它在将历史导出到逻辑变更集方面做得很好,但有一些小限制:
除此之外,它非常适合我们的目的,我们能够成功地将我们的代码和历史迁移到 GitHub。我希望它对其他人也有用!
导入部分很简单:从初始存储库
中提取一组连贯的文件后,您可以将其添加到 git 存储库中,该存储库将检测任何修改/添加/删除。
“连贯” = 一组代表稳定状态的文件,例如“编译”:这些时间点通常由标签表示,尤其是在像 SAW 这样的文件级别工作的 repo 中(与 git 相反,它在存储库级别工作,每个修订代表完整repo的内容)
向 git 添加一组文件很简单:
git --work-tree=/path/to/extracted/file --git-dir=/path/to/git/repo/.git add -A
git --work-tree=/path/to/extracted/file --git-dir=/path/to/git/repo/.git commit -m "new revision from SAW import"
困难在于确定要导入什么。
我建议列出所有标签,并使用它们来获取所有项目GetProject -label
(使用SAW CLI)
请注意,每个项目都应该在自己的 Git 存储库中:这将避免大型臃肿的存储库,这将难以克隆,而不是使用 SAW 的集中式模型,您可以将所有项目放在一个引用中。
我能够使用 SourceAnywhere COM SDK 编写一个小实用程序来提取我的历史记录(在 SDK 允许的范围内)并编写一个快速导入脚本以将其全部加载到 git 中。
虽然并非每个中间变更集都一定是“连贯的”,但最终结果与我们当前的状态相匹配,并且我们保留了大部分历史记录。
你可以看看其他 git-over-XYZ 实现是如何工作的。例如,这是 git-svn的代码,这是 git-cvsimport 的代码(都在 Perl 中)。