2

我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我希望迁移到 GitHub,并且真的很想保留我们 8 年多的历史。

是否有其他人成功完成此迁移并愿意分享他们的工具/流程?

现在,假设以前没有这样做过,我想我正在考虑fast-import使用 SourceAnywhere SDK 或命令行客户端编写一个 git 脚本。作为 git 新手,是否有任何现有的脚本或资源可以指导我作为起点?

4

3 回答 3

2

我终于清理了我的项目并将其添加到 GitHub。你可以在这里找到它:SAWHtoGit

它在将历史导出到逻辑变更集方面做得很好,但有一些小限制:

  • 由于 SourceAnywhere API 的限制,任何已在 SourceAnywhere 中删除的文件都不会导入到历史记录中。
  • 只要您提供旧/新目录的映射,任何被“移动”的文件都可以被导入。

除此之外,它非常适合我们的目的,我们能够成功地将我们的代码和历史迁移到 GitHub。我希望它对其他人也有用!

于 2013-02-05T23:41:25.997 回答
1

导入部分很简单:从初始存储库
中提取一组连贯的文件后,您可以将其添加到 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 的集中式模型,您可以将所有项目放在一个引用中。


OP评论

我能够使用 SourceAnywhere COM SDK 编写一个小实用程序来提取我的历史记录(在 SDK 允许的范围内)并编写一个快速导入脚本以将其全部加载到 git 中。
虽然并非每个中间变更集都一定是“连贯的”,但最终结果与我们当前的状态相匹配,并且我们保留了大部分历史记录。

于 2013-01-07T08:57:11.587 回答
0

你可以看看其他 git-over-XYZ 实现是如何工作的。例如,这是 git-svn的代码,这是 git-cvsimport 的代码(都在 Perl 中)。

于 2013-01-07T06:02:08.123 回答