我在 DVCS 聚会上迟到了,因为我通过使用文件夹副本进行自己的版本控制进行了很长时间的单独开发。对于一个小项目,我基本上会有一个如下所示的文件夹结构:
- 项目
- 发展
- 发布1.0
- release1.1(用于修复错误)
- release1.2(用于修复错误)
- 2.0 版(新功能)
我现在正在使用 Mercurial (SourceTree) 和 BitBucket 开始学习 DVCS,并通过一些新项目慢慢学习 GUI 和命令行,在这些项目中我可以重新开始使用 DVCS。我想将一些旧项目移至 DVCS,但我不想丢失我的项目历史记录。最好的路径是什么,或者是否值得付出努力?
我正在考虑以下内容(尝试使用 HgFlow 方法):
- 使用 1.0 版的代码创建存储库
- 将文件提交到开发分支
- 为release1.0添加标签
- merge 到母版
- 从开发分支中,为版本 1.1 创建功能/修补程序分支
- 将文件从版本 1.1 复制到修补程序分支并提交
- 将修补程序分支 merge 到开发和主控中
- 为版本 1.1 添加标签
- 从开发分支中,为版本 1.2 创建功能/修补程序分支
- 将文件从版本 1.2 复制到修补程序分支并提交
- 将修补程序分支 merge 到开发和主控中
- 为版本 1.2 添加标签
- 等等
这看起来是一个可行的方法吗?您有什么建议?
最佳答案
是的,你的方法很好。唯一需要添加的就是使用hg addremove
在提交下一版本的代码之前。此命令可以为您找到重命名的文件,从而帮助您重新创建更准确的历史记录。
工作流程就变成了
创建存储库
将文件从
release1.0
复制到工作副本中。它们都将被视为未知(hg status
中的? ...
行)。使用
hg addremove
安排它们全部添加。在运行hg addremove
之前调整.hgignore
文件以排除构建输出。提交并将其标记为
1.0
。使用常规操作系统删除命令从工作副本中删除所有文件。这些文件现在将被列为缺失(
hg status
中的! ...
行)。将文件从
release1.1
复制到工作副本中。与release1.0
相比发生更改的文件现在显示为已修改,(重要的是)新添加的文件显示为未知,而删除的文件仍然显示为丢失。运行
hg addremove
安排添加新文件和删除缺失文件。如果 1.0 中的文件foo.c
在 1.1 中重命名为bar.c
,则foo.c
将显示为缺失,并且bar.c
将显示为未知。当您运行hg addremove
时,Mercurial 会将其识别为重命名。使用--similarity
选项调整文件需要的相似程度才能被视为重命名。提交并将其标记为
1.1
。
现在对其他版本重复此操作。重要的部分是在每次代码导入之间清理工作副本 - 如何确保每次提交准确反射(reflect)您之前使用的文件夹中的状态。
关于version-control - 将旧项目历史转移到 DVCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512532/