Mercurial源代码控制 - Forking的优缺点

时间:2011-05-11 11:48:00

标签: version-control mercurial codeplex fork

我正在自定义BlogEngine.Net以支持自定义本地功能(波斯语日历,RTL主题等)

BlogEngine.Net使用mercurial源代码控制,我可以创建项目的分支并将其更改提交给它。但我想将它作为一个单独的项目发布,因为代码中有重大修改以支持波斯语,我不打算向主项目发送拉取请求。 AFAIK我有两种选择:

  1. 我可以下载BlogEngine.Net的源代码,创建一个新项目,提交原始源文件,然后将我的更改提交到存储库。
  2. 我可以分叉主项目并拥有一个克隆存储库。然后我可以在该存储库上提交。
  3. 现在使用叉子有什么好处?如果我创建一个fork,我是否能够像自己的项目(选项1)一样在自己的页面中释放我的项目?通过说“它自己的页面”我的意思是我希望有一个像“FarsiBlogengine.CodePlex.Com”这样的地址并制作二进制版本,可以下载源代码版本,有一个讨论论坛等。就像我有的功能一样当我不使用分叉时。

    一般来说,使用分叉而不是下载主项目,创建新项目和承诺新项目的优点是什么?
    感谢。

1 个答案:

答案 0 :(得分:5)

分叉(又名:克隆)(又名:选项#2)的主要好处是您的存储库将包含父存储库的整个历史记录,如果需要,可以启用从该存储库推送或拉出的选项。使用选项#1,您将从父存储库的快照开始,并丢失项目历史记录/沿袭。

当确定两个存储库是否相关时,Mercurial将寻找一个共同的祖先 - 在选项#1的情况下,你将没有那个,并且在选项#2的情况下,你将。即使你明确声明你不想与父仓库执行任何同步(推/拉/等等),你可能会发现BlogEngine.net发布了一个关键的错误修复,你想要拉过来并执行拉动偶尔。选项#1将阻止您这样做,因为它不会找到共同的祖先,但选项#2将允许它。

在发布代码方面,我并不完全确定“你自己的页面”是什么意思,但我不认为你会发布任何一个选项的任何问题。在这两种情况下,您只拥有一个简单的存储库。在#2的情况下,你只有一个更大的存储库,提交更多,历史更多。