2013-01-07 35 views
1

我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我期待迁移到GitHub,并且真的想保留我们8年以上的历史。Git/GitHub从SourceAnywhere导入

是否有其他人成功完成了此迁移和关注以分享他们的工具/流程?

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

回答

2

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

它做出口的历史划分为逻辑的变更,有一些小的限制做得非常好:

  • 已在SourceAnywhere被删除的任何文件将不被导入到历史,在所有因限制在SourceAnywhere API中。
  • 只要您为旧/新目录提供映射,就可以导入任何'已移动'的文件。

除此之外,它的工作以及为我们的目的,我们能够以我们的代码和历史成功迁移到GitHub上。我希望它对其他人也有用!

+0

良好的反馈,除了我的答案。 +1 – VonC

1

进口部分很简单:
一旦提取连贯组文件从您最初的回购,可以将其添加到混帐回购协议,这将检测到任何修改/添加/删除。

“Coherent”=代表稳定状态的文件集合,例如“编译”:这些时间点通常由标签表示,特别是在像SAW这样的文件级别工作的repo中与git,这在仓库级别的作品,代表了回购的内容

添加一组文件的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 Dancomments

我能够使用SourceAnywhere COM SDK编写一个小工具来提取我的历史(尽可能最好的SDK将允许),写了快导入脚本将其全部加载到git中。
尽管不是每个中介变量都必须是“一致的”,但最终结果与我们目前的状态相符,并且我们保留了大部分历史记录。

+0

谢谢!听起来像你以前做过的那样:)我们不使用标签,但我认为'GetProjectHistory -prj $/-v'会给我'一致的'时间戳,我可以使用'GetProject -time'。我想保留/映射用户和签入说明,但似乎这种方法不允许这样做?在GUI中显示的评论看起来并没有在CLI中看到。 – Dan

+0

@Dan这种方法会允许吗?不容易。不要忘记,git没有认证(http://stackoverflow.com/a/5685757/6309),所以你附加一个提交(项目全部内容的修订)*一个*名称(提交者名称)。如果您的'GetProjectHistory -prj $/-v'显示了一个由多个贡献组成的状态,那么您将无法将其导入多个附加名称。记住:你导入一个全部内容,而不是一些文件。 Git不能逐个文件地工作(与其他较早的集中式VCS相反:http://stackoverflow.com/a/645771/6309)。 – VonC

+0

感谢您的帮助!虽然我没有完全使用你的解决方案('GetProject -time'没有像我想的那样工作),它指出了我的正确方向。我能够使用SourceAnywhere COM SDK编写一个小型实用程序来提取我的历史记录(与SDK所允许的一样),并写出一个'fast-import'脚本将它加载到git中。虽然并非每一个中介变革都必须“连贯一致”,但最终结果与我们目前的状况相符,而且我们保留了大部分历史。我打算清理我的代码,并将来在GitHub上分享它。 – Dan