7

我有一份新工作,但是他们使用 mercurial 作为版本控制,而我的大部分经验都是使用 git。我尝试学习 mercurial,但它的分支方式(即使是像书签这样的扩展)对我来说完全没有意义。有谁知道在本地使用 git 但推送到 mercurial 的方法?

我已经尝试了 hg-git 插件,并且已经到了可以在 git 中提交并将这些更改推送到远程 mercurial 存储库的地步,但是我遇到的问题是,无论我找到什么教程,我都不能似乎将新的变化从 mercurial 拉回 git(这使得整个事情在这一点上毫无用处)。如果您有关于如何设置 hg-git 以工作推送到 mercurial 的链接,请告诉我。

解决方案(我认为)

根据 Lazy Badger 的评论,我认为这是可行的:http ://ryanzec.com/index.php/blog/details/9

4

3 回答 3

3

您可以从 git 使用 Mercurial 端点,但是,与反向(hg -> git)不同,您必须在同一位置同时拥有VCS两个 repos

  1. 安装 Mercurial
  2. 为 Mercurial 安装 hg-git 扩展
  3. 确保您已在您的.hgrc
  4. 添加到您的 .hgrc:

    [git]
    intree=1
    
  5. 克隆您的 Mercurial 存储库

    hg clone ... repo
    
  6. 去回购

    cd repo
    
  7. 创建一个本地书签来跟踪您的 Mercurial 默认分支 - 这就是将导出到您的 Git 的内容

    hg bookmark hg/default -r default
    
  8. 导出到 git 存储库

    hg gexport
    
  9. 配置 Hg 以忽略 Git 存储库

    echo ".git" >> .hg/hgignore
    
  10. 配置 Git 以忽略 Hg 存储库

    echo ".hg*" >> .git/info/exclude
    
  11. 将 Git 配置为忽略与 Mercurial 相同的内容

    git config core.excludesfile `pwd`/.hg/hgignore
    
  12. 让您的主分支跟踪导出的 Hg 默认分支

    git branch --track master hg/default
    git reset --hard
    
  13. 像往常一样工作并提交到 Git

  14. 将您的更改导出到 Hg

    hg gimport
    
  15. 将一切推向世界

    hg push
    

对于日常工作,重复步骤 13-15

PS:从 HG 到 Git的工作产生的动作和头痛要少得多

于 2011-10-26T01:33:12.510 回答
3

想一想,看看替代解决方案,同样不平衡和弯曲,但不那么自命不凡(我希望) - 3 层链架构中的 3 个 repos(2 Mercurial + 1 Git)

它们具有(本地)名称,如下所示:

  • Master (hg) - 公司的中央 Mercurial repo
  • Mediator (hg) - 用于翻译变更集的中间件,作为 Master 的克隆创建
  • WorkHorse (git) - 最终工作场所,开始时为空

调解器已将解决方案 1 中的 hg-repo 设置几乎相同(hg-git、书签),除了 hgrc 的 [paths] 部分中的一个细节 - 将是两个路径:Master 和 WorkHorse,以便能够拉入|推入双向,Master 和 WorkHorse

工作流程:

  • Mediator 从 Master 拉取变更,推送到 WorkHorse(变更集按原样呈现,没有崩溃,与解决方案 1 相反)
  • 所有(几乎?不确定合并)工作都发生在 WorkHorse
  • Mediator 从 WorkHorse 拉取更改,推送到 Master
于 2011-10-27T13:20:51.567 回答
1

如今,有一个新的 git-remote-hg 扩展可以满足您的需求。它似乎是 Hg-Git 插件的对应物。见http://felipec.wordpress.com/2012/11/13/git-remote-hg-bzr-2/

于 2013-05-28T08:43:47.767 回答