0

两种情况,一种有效,一种无效,但它们都应该:

  • 场景 #1:(不能通过 apache 工作)
    • 服务器服务器上的 2 个存储库:存储库“A”,通过 http://SERVER/HG/A 从存储库 A 克隆的存储库“B”
    • 在客户端:
      从 http://SERVER/HG/A克隆的存储库 A 从 http://SERVER/HG/
      B 克隆的存储库 B
    从客户端向 repo A 添加了一个文件并提交并将其推送到 http://SERVER/HG/A ... WORKS 从客户端向 repo B 添加了一个文件并提交并将其推送到 http://SERVER/HG /B ... ERROR with abort: repository is unrelated,它仅在 I -f (强制)推送时才有效
  • 场景#2:(通过文件系统工作)
    • 在服务器服务器上:回购“A”,从 E:/HG/A 克隆的回购“B”
    • 在客户端:
      从 E:/HG/A 克隆的 Repo A 从 E:/HG/
      B 克隆的 Repo B
    从客户端向 repo A 添加了一个文件并提交并将其推送到 E:/HG/A ... WORKS
    从客户端向 repo B 添加了一个文件并提交并将其推送到 E:/HG/B ... WORKS

结论: ... apache 配置或 apache 与 mercurial 之间的集成中的某些东西使 repo“不相关”...。有什么想法吗???为什么我需要在第一种情况下强制但在第二种情况下不必?...我通过 tortoisehg 和命令行尝试了这两种情况。

4

1 回答 1

1

我不太清楚你的情况出了什么问题,但我打电话告诉当 mercurial 说“不相关”时,这意味着:这两个存储库没有一个或多个根。

通常,一个 mercurial 存储库有一个根,修订版 0,任何具有相同根的存储库都可以推送到它。存储库可以有多个根,通常是某人执行push -f.

所以你在场景一中所做的应该完全有效。如果不是,那么您的 apache 配置指向的http://SERVER/HG/B不是您认为应该的位置(可能是错误的RewriteRuleor RedirectMatchor ScriptAlias,或者您的 Repo B 没有像您认为的那样从 Repo A 克隆,或者 Repo A 或 B 在之后发生了根本变化B最初是克隆的。

如果用于修改该节点,有一些工具会更改根(修订版 0)节点的哈希码:mq、histedit、strip、rebase 等。这是因为更改哈希完全改变了这些工具被禁用的存储库默认值,仅用于本地未推送的更改。

要开始调试,请进入服务器并查看如果您在文件系统级别在存储库 A 和 B 之间进行传入或传出会发生什么。如果那些抱怨,那么你知道它不是 apache,如果他们这样做,那么这是你的 Apache 设置的东西。

于 2010-06-10T18:29:13.567 回答