我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我期待迁移到GitHub,并且真的想保留我们8年以上的历史。Git/GitHub从SourceAnywhere导入
是否有其他人成功完成了此迁移和关注以分享他们的工具/流程?
现在,假设这还没有做过,我想我正在编写一个使用SourceAnywhere SDK或命令行客户端的git fast-import
脚本。作为git的新手,是否有任何现有的脚本或资源可以指导我作为起点?
我们目前使用SourceAnywhere Hosted作为我们的版本控制服务器。我期待迁移到GitHub,并且真的想保留我们8年以上的历史。Git/GitHub从SourceAnywhere导入
是否有其他人成功完成了此迁移和关注以分享他们的工具/流程?
现在,假设这还没有做过,我想我正在编写一个使用SourceAnywhere SDK或命令行客户端的git fast-import
脚本。作为git的新手,是否有任何现有的脚本或资源可以指导我作为起点?
我终于清理了我的项目并将其添加到GitHub。你可以在这里找到它:SAWHtoGit。
它做出口的历史划分为逻辑的变更,有一些小的限制做得非常好:
除此之外,它的工作以及为我们的目的,我们能够以我们的代码和历史成功迁移到GitHub上。我希望它对其他人也有用!
您可以看看其他git-over-XYZ实现如何工作。例如,here's the code for git-svn和here's the code for git-cvsimport(都在Perl中)。
进口部分很简单:
一旦提取连贯组文件从您最初的回购,可以将其添加到混帐回购协议,这将检测到任何修改/添加/删除。
“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的集中模型,您可以将所有项目放在一个参考中。
我能够使用SourceAnywhere COM SDK编写一个小工具来提取我的历史(尽可能最好的SDK将允许),写了快导入脚本将其全部加载到git中。
尽管不是每个中介变量都必须是“一致的”,但最终结果与我们目前的状态相符,并且我们保留了大部分历史记录。
谢谢!听起来像你以前做过的那样:)我们不使用标签,但我认为'GetProjectHistory -prj $/-v'会给我'一致的'时间戳,我可以使用'GetProject -time'。我想保留/映射用户和签入说明,但似乎这种方法不允许这样做?在GUI中显示的评论看起来并没有在CLI中看到。 – Dan
@Dan这种方法会允许吗?不容易。不要忘记,git没有认证(http://stackoverflow.com/a/5685757/6309),所以你附加一个提交(项目全部内容的修订)*一个*名称(提交者名称)。如果您的'GetProjectHistory -prj $/-v'显示了一个由多个贡献组成的状态,那么您将无法将其导入多个附加名称。记住:你导入一个全部内容,而不是一些文件。 Git不能逐个文件地工作(与其他较早的集中式VCS相反:http://stackoverflow.com/a/645771/6309)。 – VonC
感谢您的帮助!虽然我没有完全使用你的解决方案('GetProject -time'没有像我想的那样工作),它指出了我的正确方向。我能够使用SourceAnywhere COM SDK编写一个小型实用程序来提取我的历史记录(与SDK所允许的一样),并写出一个'fast-import'脚本将它加载到git中。虽然并非每一个中介变革都必须“连贯一致”,但最终结果与我们目前的状况相符,而且我们保留了大部分历史。我打算清理我的代码,并将来在GitHub上分享它。 – Dan
良好的反馈,除了我的答案。 +1 – VonC