version-control - 将旧项目历史转移到 DVCS

标签 version-control mercurial bitbucket

我在 DVCS 聚会上迟到了,因为我通过使用文件夹副本进行自己的版本控制进行了很​​长时间的单独开发。对于一个小项目,我基本上会有一个如下所示的文件夹结构:

  • 项目
    • 发展
    • 发布1.0
      • release1.1(用于修复错误)
      • release1.2(用于修复错误)
    • 2.0 版(新功能)

我现在正在使用 Mercurial (SourceTree) 和 BitBucket 开始学习 DVCS,并通过一些新项目慢慢学习 GUI 和命令行,在这些项目中我可以重新开始使用 DVCS。我想将一些旧项目移至 DVCS,但我不想丢失我的项目历史记录。最好的路径是什么,或者是否值得付出努力?

我正在考虑以下内容(尝试使用 HgFlow 方法):

  1. 使用 1.0 版的代码创建存储库
  2. 将文件提交到开发分支
  3. 为release1.0添加标签
  4. merge 到母版
  5. 从开发分支中,为版本 1.1 创建功能/修补程序分支
  6. 将文件从版本 1.1 复制到修补程序分支并提交
  7. 将修补程序分支 merge 到开发和主控中
  8. 为版本 1.1 添加标签
  9. 从开发分支中,为版本 1.2 创建功能/修补程序分支
  10. 将文件从版本 1.2 复制到修补程序分支并提交
  11. 将修补程序分支 merge 到开发和主控中
  12. 为版本 1.2 添加标签
  13. 等等

这看起来是一个可行的方法吗?您有什么建议?

最佳答案

是的,你的方法很好。唯一需要添加的就是使用hg addremove在提交下一版本的代码之前。此命令可以为您找到重命名的文件,从而帮助您重新创建更准确的历史记录。

工作流程就变成了

  1. 创建存储库

  2. 将文件从 release1.0 复制到工作副本中。它们都将被视为未知(hg status 中的 ? ... 行)。

  3. 使用hg addremove安排它们全部添加。在运行 hg addremove 之前调整 .hgignore 文件以排除构建输出。

  4. 提交并将其标记为 1.0

  5. 使用常规操作系统删除命令从工作副本中删除所有文件。这些文件现在将被列为缺失(hg status 中的 ! ... 行)。

  6. 将文件从 release1.1 复制到工作副本中。与 release1.0 相比发生更改的文件现在显示为已修改,(重要的是)新添加的文件显示为未知,而删除的文件仍然显示为丢失。

  7. 运行 hg addremove 安排添加新文件和删除缺失文件。如果 1.0 中的文件 foo.c 在 1.1 中重命名为 bar.c,则 foo.c 将显示为缺失,并且 bar.c 将显示为未知。当您运行 hg addremove 时,Mercurial 会将其识别为重命名。使用 --similarity 选项调整文件需要的相似程度才能被视为重命名。

  8. 提交并将其标记为 1.1

现在对其他版本重复此操作。重要的部分是在每次代码导入之间清理工作副本 - 如何确保每次提交准确反射(reflect)您之前使用的文件夹中的状态。

关于version-control - 将旧项目历史转移到 DVCS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26512532/

相关文章:

git - git merge 适合这个图中的什么地方

visual-studio - 如何使用Visual Studio 2010中的Mercurial?

git - push GIT 和 Bitbucket

git - 试图推送到 BitBucket 但我得到 "master conq: repository access denied." "fatal: The remote end hung up unexpectedly"

java - Ant 与 Mercurial

Git pull 错误 : Your local changes to the following files would be overwritten by merge:

version-control - 将包含 zip 文件的旧备份移动到版本控制(mercurial)

git - 无法将功能书签 merge 到 mercurial 中的主书签中

ios - Xcode/iOS intern版本号,哪个版本号小?

mercurial - 用所有大文件复制 Hg repo