如何修复Mercurial坚持Git subrepo推?

Rar*_*rst 7 git mercurial github mercurial-subrepos

  1. 我有根Mercurial repo(网站).
  2. 我将WordPress从GitHub镜像克隆到/wp子目录中.
  3. 因为我想要非常具体(稳定)的WP版本,但我没有正在进行的开发git checkout 3.4.1(3.4.1标签在哪里).
  4. 我将它设置为根Mercurial repo和commit中的subrepo(WP版本被捕获得很好.hgsubstate).

这里麻烦开始了.我这样做hg push,什么时候到WP:

no branch checked out in subrepo wp
cannot push revision e9bc63e25dc40c07ac3a6778dc2b48e1aa486e36
Run Code Online (Sandbox Code Playgroud)

然后就退出了.甚至没有尝试推送根目录.

我理解为什么Mercurial 试图推动subrepo(预期的行为),但我无法理解为什么它设法完全失败的subrepo:

  1. 没有变化
  2. 无论如何都有只读来源

如何让它理解我想要这个特定的修订,我不希望它搞乱Git subrepo?

Tim*_*gan 4

使用此设置您将遇到几个问题。

首先,mercurial 似乎无法处理带有分离 HEAD 的 git subrepos

当您执行时git checkout 3.4.1,您的存储库进入分离的 HEAD状态(当您执行该命令时,您应该已经看到了该效果的警告)。此时,如果您运行git branch,您会看到它(no branch)被列为活动分支。当水银试图推动时,它就会在这种状态下窒息。您可以询问Mercurial 开发人员列表为什么会发生这种情况,但这可能是现有子存储库实现的限制。

其次,mercurial 使用推送命令来同步 git subrepos

如果你要运行git checkout -b <integration_branch> 3.4.1,它会将 git 移出分离的 HEAD 状态。但是,当您尝试时hg push,它会尝试实际推送到远程 git 存储库。对于 Mercurial 子存​​储库,即使您没有远程推送访问权限,它也可以检查传出的更改。但是,GitHub 要求您进行身份验证,然后它才会告诉您两个存储库是否同步。因此,如果您没有对 git 远程的推送访问权限,那么这将会失败。这是mercurial subrepo 策略设计的一部分。

如果您需要继续此设置,您可能应该执行以下操作:

  1. 在 GitHub 上创建您自己的 WordPress 存储库分支。
  2. 将您的分支克隆到 Mercurial 子存​​储库目录中。
  3. git checkout -b <branch_name> 3.4.1
  4. 从那里继续

此相关问题中有一些附加信息。