我独自开发了很长一段时间,用文件夹副本进行了自己的版本控制,现在参加DVCS派对迟到了。对于一个小项目,我基本上会有一个看起来像这样的文件夹结构:
- 项目
-
- 发展
-
- 版本1.0
-
-
- 版本1.1(用于修复错误)
-
-
-
- 1.2版(用于修复错误)
-
-
- 2.0版(用于新功能)
我现在开始使用Mercurial(SourceTree)和BitBucket学习DVCS,并通过一些新项目慢慢学习GUI和命令行的技巧,在这些项目中,我可以使用DVCS重新开始。我想把我的一些旧项目转移到DVCS,但我不想失去我的项目历史。走哪条路是最好的,或者值得付出努力吗?
我正在思考以下内容(尝试使用HgFlow方法):
- 使用1.0版中的代码创建存储库
- 将文件提交到开发分支
- 为版本1.0添加标签
- 合并到主控形状
- 从开发分支创建1.1版本的功能/修补程序分支
- 将1.1版中的文件复制到修补程序分支并提交
- 将修补程序分支合并到开发和主
- 为1.1版添加标签
- 从开发分支创建1.2版本的功能/修补程序分支
- 将1.2版中的文件复制到修补程序分支并提交
- 将修补程序分支合并到开发和主
- 为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
。
现在对其他版本重复此操作。重要的部分是在每次代码导入之间清理工作副本——如何确保每次提交都准确地反映出您以前使用的文件夹中的状态。