从SourceAnywhere导入Git/GitHub

从SourceAnywhere导入Git/GitHub,git,github,git-fast-import,Git,Github,Git Fast Import,我们目前将其用作版本控制服务器。我希望迁移到GitHub,并希望保留我们8年以上的历史 是否有其他人成功完成了此迁移并愿意共享他们的工具/流程 现在,假设以前没有这样做过,我想我正在考虑使用SourceAnywhere SDK或命令行客户端编写gitfast import脚本。作为git的新手,您是否可以将现有的脚本或资源作为起点指导我?您可以看看其他git over XYZ实现是如何工作的。例如,和(在Perl中都是)。导入部分很简单: 一旦从初始repo中提取了一组连贯的文件,就可以将其添加

我们目前将其用作版本控制服务器。我希望迁移到GitHub,并希望保留我们8年以上的历史

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


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

您可以看看其他git over XYZ实现是如何工作的。例如,和(在Perl中都是)。

导入部分很简单:
一旦从初始repo中提取了一组连贯的文件,就可以将其添加到git repo中,git repo将检测任何修改/添加/删除

“一致”=表示稳定状态的一组文件,例如“编译”:这些时间点通常由标签表示,尤其是在文件级的repo中,如SAW(与git相反,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
(使用)

请注意,每个项目都应该有自己的Git repo:这将避免大型膨胀的repo,这将很难克隆,而不是使用SAW的集中式模型,您可以将所有项目放在一个引用中


委员会:

我能够使用SourceAnywhere COM SDK编写一个小型实用程序来提取我的历史记录(尽SDK所能),并编写一个快速导入脚本将其全部加载到git中。
虽然并非每个中间变更集都必须“一致”,但最终结果符合我们当前的状态,我们保留了大部分历史


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

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

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

除此之外,它在我们的目的下运行良好,我们能够成功地将代码和历史迁移到GitHub。我希望它对其他人也有用

谢谢!听起来你以前做过:)我们不使用标签,但我认为
GetProjectHistory-prj$/-v
会给我“连贯”的时间戳,我可以用于
GetProject-time
。不过,我想保留/映射用户和签入描述,而这种方法似乎不允许这样做?该注释虽然显示在GUI中,但似乎与CLI不符。@Dan这种方法允许这样做吗?不容易。不要忘了git没有身份验证(),所以您可以将一个名称(提交者名称)附加到提交(项目完整内容的修订版)上。如果您的
GetProjectHistory-prj$/-v
向您显示由多个贡献组成的状态,您将无法导入附加了多个名称的状态。请记住:导入的是所有内容,而不是某些文件。Git无法逐个文件工作(与其他较旧的集中式VCS不同:)。感谢您的帮助!虽然我没有完全使用您的解决方案(
GetProject-time
没有像我想的那样工作),但它为我指明了正确的方向。我能够使用SourceAnywhere COM SDK编写一个小实用程序来提取我的历史记录(尽SDK所能),并编写一个
fast import
脚本将其全部加载到git中。虽然并非每个中间变更集都必须“一致”,但最终结果符合我们当前的状态,我们保留了大部分历史。我确实计划将来清理我的代码并在GitHub上共享。@Dan:太好了。我已将您的评论包含在答案中,以提高可视性。谢谢!我终于发布了我的解决方案,并添加了一个详细的答案。欣赏正确方向的指针!很好的反馈,除了我的答案+1.