【问题标题】:Contributing patches from Mercurial to Git?从 Mercurial 向 Git 贡献补丁?
【发布时间】:2012-06-26 14:12:44
【问题描述】:

我想派生一个 Git 存储库,将其转换为 Mercurial,并在完成后将我的更改贡献回原始 Git 存储库。我更关心安全稳定的转换过程,而不是它的便利性。我会定期pulling 从 Git 到 Mercurial 的更改,但很少回馈任何更改。

我不习惯使用hg-git,因为针对该项目报告的许多错误多年来都没有得到答复。我怀疑使用hg convert 将Git 转换为Hg 比使用hg-git 更安全。

我的问题是:假设我已经将存储库转换为 Mercurial 并进行了一些更改,我如何将这些更改贡献回官方存储库?我想将我的更改贡献回到官方 Git 存储库,而不会丢失任何历史信息(也就是说,我不想将多个变更集折叠成一个)。

最简单、最安全的方法是什么?

【问题讨论】:

  • 当项目正式托管在 svn 或 cvs 上时,有理由使用现代 scm,因此可以使用广泛的工具来简化此操作。但是,如果项目已经托管在现代 scm 中,那么就没有理由不在本地使用相同的 scm。
  • @bames53,我同意,但就像我们每天做出的许多其他决定一样,这完全是主观的:)
  • 可以肯定的是,您知道该链接不是指向官方 hg-git 存储库的链接吗?可以找到here
  • @obmarg,根据hg-git.github.com,您提供的链接实际上是我提供的链接的镜像(这是规范来源)。请参阅网站底部的链接。

标签: git mercurial repository


【解决方案1】:

您可以尝试将 Mercurial 提交导出为补丁:

hg export --git -r 1 >patch.diff

这个 .diff 文件应该被 Git 识别,并且可以使用 git apply 添加到 git 存储库中。
(这是在“Convert a Mercurial Repository to Git”中提出的,其中还提到了更新的script hg-fast-export

hg export--git 选项将确保您生成 git 扩展差异格式的差异。有关更多信息,请参阅hg help diffs

【讨论】:

  • 这不会将多个变更集合并为一个吗?
  • @Gili:如果是这样,您只需列出您感兴趣的所有 Hg 修订,并为每个修订生成一个 .diff 文件(您将依次应用到您的 Git回购)。 hg export 可以接受单个修订版或一系列修订版。
  • 我运行了一个快速测试:hg export --git -r 1 -r 2 >patch.diff 将两个修订都嵌入到同一个文件中,但提供了足够的信息来说明哪些更改进入了哪个更改集。我相信这会奏效。谢谢!
  • git 不接受这样的补丁,说“错误:无法识别的输入”
  • @Alex Strange:你使用的是什么 git 版本?在哪个操作系统上?您使用了哪个 git 命令?有什么eol问题吗? (\r\n 应用于\n 文件)
猜你喜欢
  • 2011-12-08
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
相关资源
最近更新 更多