在过去的几年中,我使用了所有三个版本管理系统(TortoiseSVN,TortoiseHg,TortoiseGit)并对其进行了全面测试。
这是我的结论:
SVN / Subversion(TortoiseSVN)
优势:
- 仅签出完整存储库的一部分/子文件夹的可能性
- 修订注释和修订用户名可以在以后更改,而不会更改/影响任何校验和或修订标识号。
- 可以签入空文件夹(结构)
缺点:
- 没有分布式版本管理系统(您始终需要连接到服务器存储库)
- 上次签入的修订不能更改/修改/回滚
TortoiseHG / Mercurial
优势:
- 分布式版本管理系统
- 文件重命名既可以手动定义也可以自动检测(在特殊对话框=>算法中:文件内容的相似性检查)
- 在TortoiseHg-Workbench中,显示所有修订树(与Git相反)
- 有可用的修订号和修订校验和(“哈希”)(比Git中的人类更容易定向)
- 最新版本仍可在Windows XP中运行
- 在从另一个仓库回购或推送到另一个仓库之前,可以检查受影响的修订版本(并在必要时中止操作)
- Shelve是一项巧妙的功能,可以临时保存多个(未修订的)更改(以这种方式在SVN和Git(“隐藏”)中均不可用)
- 裸仓库和非裸仓库之间没有令人讨厌的区别(与Git相比)->即使在签出状态下,也可以将版本发送到合作伙伴仓库,因为仅会影响合作伙伴仓库的历史记录(在与Git对比)
- TortoiseHg自动安装“工作台”
- 可以使用扩展名“ mq”轻松更改历史记录-错误的签入或分支不必永远留在存储库中,但可以删除-但要小心:这将导致不同的校验和,因此克隆存储库中的新分支...
缺点:
- 无法检出并将单个文件夹提交到存储库中(如果您有一个很大的存储库,并且只想保留其中的一小部分)
- 无法签入空文件夹/文件夹结构
TortoiseGit / Git
优势:
- 分布式版本管理系统
- 可以更改/重建历史记录(可以删除/更改单个修订版本)
- 可以导入SVN存储库
- 可以将单个分支发送到另一个Bare-Repo(或从另一个Repo导入)=>“ Heads”中的思维方式
缺点:
- 文件/文件夹的重命名不受影响!此类信息未存储在存储库中,并且每次查看存储库时都会重新检测到。有时,算法最终会导致错误的结果。
- 在从合作伙伴仓库中提取更改之前,无法在导入导入的修订之前对其进行检查。只能以光学方式比较两个存储库
- 发送修订只能在裸仓库中进行(在HG中,此问题不存在)
- 没有“人类可读”的修订号-仅SHA-1哈希
=>回购中的定向问题!
- TortoiseGit默认情况下没有工作台(只能通过上下文菜单分别处理多个打开的窗口或通过终端进行处理)
- “存储”功能不像Mercurial / Hg中的“存储架”功能那样强大而清晰
- 重建存储库会在文件系统中留下数据残留-如果您不小心签入了一个大文件,您将无法取出文件并轻易缩小存储库!
- 无法签入空文件夹/文件夹结构
- 使用注释功能,文件中各个更改的颜色具有欺骗性!在很小的时间范围内所做的不同更改的颜色只会略有不同!!!
- 如果在修订版X和修订版X + 5中更改了文件,并且您查看了在修订版X + 5中进行了哪些更改,则比较工具将在标题中显示修订版X + 4和X + 5。最好是显示修订版X和X + 5! =>这样就不可能实现无间隙更改历史记录!
- 修订注释可以在以后进行,但不会被推送/拉入合作伙伴存储库。所以他们可能最终会迷路:-(
结论
尽管我最初对TortoiseHg存有偏见,但我不得不勉强承认这是具有最大优势的系统。
就我自己而言,经过约3年的比较,我决定使用 TortoiseHg / Mercurial 。