从VSS迁移到Git并保留历史记录

8

我正在尝试将一个Visual SourceSafe仓库转换为Git,并保留完整的版本历史。所以我尝试使用https://github.com/trevorr/vss2git。它起作用了,但是它没有保留历史记录。因此,我尝试使用TFS作为中间人。我使用了最新版本的TFS及其升级向导,但它没有保留历史记录,所以我尝试了TFS 2013 (如何将VSS 2005迁移到TFS 2015?)和它的升级向导,但仍然没有历史记录。我现在非常绝望,不知道问题出在哪里,因为我甚至分析了我的VSS仓库,没有发现任何错误。我已经阅读到可以尝试使用SVN作为中间人,所以我会尝试一下,但我持怀疑态度。

3个回答

4
下面是我几年前使用的解决方案。当我尝试使用vss2git时,它在一个周末内将我们9GB的vss数据库扩展到了103GB,但还没有完成整个转换。所以我采用了TFS服务器(2010)作为中间人,然后它就能工作了。TFS 2010 可以直接导入VSS数据库,我不确定更新的版本是否也可以。同时,TFS可以作为Git的远程服务,例如可以使用git-tf或git-tfs。导入之后,简单的 `git tfs clone` 就完成了第二部分的操作。因此,下面是具体步骤:
  1. 获取支持VSS导入的TFS版本。可以参考 链接
  2. 使用向导或命令行导入VSS数据库。
  3. 这里获取git-tfs。
  4. (可选)修复提交日期 - 详见下文。
  5. 执行如下命令:`git tfs clone http://tfs:8080/tfs/DefaultCollection $/some_project`。
我唯一记得的小问题是,TFS将所有提交的日期设置为当前日期,并将原始的vss日期放入注释中。我直接在TFS的SQLEXPRESS数据库中进行了如下修复:
UPDATE tbl_ChangeSet 
SET CreationDate =  CONVERT (datetime, Substring(Comment,2,19), 104)
Where CreationDate > '2014-01-28' AND Comment LIKE '{%'

请在查询中输入您自己的日期(上次VSS提交的日期)。
请参考此链接:https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2013/ms253060(v=vs.120)

2
对我来说,我必须修改查询为:UPDATE tbl_ChangeSet SET CreationDate = CONVERT(datetime, Substring(Comment, 2, PATINDEX('%[~}]%', Comment) - 2) FROM tbl_ChangeSet WHERE Comment Like '{%'。 - Essam Al-Mansouri

0

你可以尝试使用https://github.com/azarkevich/VssSvnConverter,但它不太友好。(尽管它的名字是将VSS转换为Git)

此外,该工具无法保留文件/目录移动/重命名的历史记录。文件将只有最新名称的历史记录。


-2

我已经找到了解决方案,我使用的程序确实有效。只是因为我试图移动太多的数据,所以它会出现故障并且无法存储历史记录。我不确定我可以安全地移动多少数据,但现在我有了历史记录。


12
好的 - 你曾寻求帮助,然后自己解决了问题。那你考虑一下是否分享解决方案,这样其他人也可以从这个无用(目前)的帖子中受益? - lip3k
6
我也很感兴趣。你迁移了多少数据?我还无法相信我仍在问关于VSS 6.0d的问题。你保留了历史记录吗?能否提供步骤?谢谢。 - Jeremy Thompson
1
当你需要帮助的时候,有人曾经为你提供过帮助。现在当别人需要你的帮助时,请伸出援手。告诉我们你是如何做到的并分享你的经验。 - Alex Net
嘿,只是为了给一些结论,那是在我的第一次实习期间,我想那也是我第一篇SO帖子,所以我不知道礼仪。对此我很抱歉。至于我做了什么,我什么都没做。当我弄清楚这个问题时,另一个人接手并编写了一个脚本,可以自动地逐个数据地执行。我不知道它是否有效。但我希望这有所帮助。 - Pierre-Alain Tietz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接