【问题标题】:"(.hg not found)" when cloning from cygwin-hosted repository via ssh to Mac and FreeBSD clients通过 ssh 从 cygwin 托管的存储库克隆到 Mac 和 FreeBSD 客户端时出现“(.hg not found)”
【发布时间】:2012-06-05 23:29:12
【问题描述】:

我在 Windows 服务器上运行一个归档文件系统,它会自动进行异地复制,这使它成为托管 Mercurial 存储库并确保其安全性的理想场所。此文件系统仅适用于 Windows,因此我别无选择,只能使用 Windows 作为主机操作系统。

设置:

服务器('ungoliant',在我的网络内部):

  • Windows 7 主存储库主机。
  • Cygwin ssh 守护进程。
  • 汞 1.9.3
  • 使用“hg init”在 Windows 上创建了新的存储库“/cygdrive/j/mercurial/rcstudio”。

客户:

  • Mac OSX 10.7.4 运行 hg 2.1.2
  • 运行 hg 2.1.2 的 FreeBSD 8.3

客户端问题(在 Mac 和 FreeBSD 上相同):

$ hg clone ssh://cjp@ungoliant//cygdrive/j/mercurial/rcstudio
running ssh cjp@ungoliant 'hg -R /cygdrive/j/mercurial/rcstudio serve --stdio'
remote: abort: There is no Mercurial repository here (.hg not found)!
abort: no suitable response from remote hg!

我已确认路径和 URI 是正确的。 那里绝对有一个“.hg”目录:

$ ls -la
total 0
drwxr-xr-x   3 cjp  staff   102 Jun  5 17:41 .
drwxr-xr-x  41 cjp  staff  1394 Jun  5 16:30 ..
$ scp -r cjp@ungoliant:/cygdrive/j/mercurial/rcstudio/.hg .
$ ls -la
total 0
drwxr-xr-x   3 cjp  staff   102 Jun  5 17:41 .
drwxr-xr-x  41 cjp  staff  1394 Jun  5 16:30 ..
drwxr-xr-x   5 cjp  staff   170 Jun  5 17:41 .hg
$ ls -la .hg
total 16
drwxr-xr-x  5 cjp  staff  170 Jun  5 17:41 .
drwxr-xr-x  3 cjp  staff  102 Jun  5 17:41 ..
-rw-r--r--  1 cjp  staff   57 Jun  5 17:41 00changelog.i
-rw-r--r--  1 cjp  staff   33 Jun  5 17:41 requires
drwxr-xr-x  2 cjp  staff   68 Jun  5 17:41 store

我发现了很多 stackoverflow 问题,其中问题是 ssh URI 格式不正确......我的格式正确并描述了绝对路径。

我已确认以下所有内容:

  • hg 命令在服务器上和通过 ssh 都可以正常运行。
  • 如果我粘贴绝对路径,我可以通过 ssh 确认 .hg 目录的存在。
  • 其他通过 ssh 手动发出的 hg 命令成功(例如:ssh cjp@ungoliant 'cd /cygdrive/j/mercurial/rcstudio; hg diff;')。
  • 在主机上,我可以从同一绝对路径进行本地克隆。

我被难住了。 Mercurial 文档听起来像是 2.1.2 应该能够从 1.9.3 父级克隆,所以它似乎不是版本冲突。

非常感谢您的帮助!谢谢!

【问题讨论】:

  • 当您通过 ssh 访问您的存储库时,使用哪个 hg 二进制文件?也许那里有一个非cygwin二进制文件,它不能处理cygwin路径,而是期望j:\mercurial\rcstudio
  • 你说得对。我自己对远程 ssh 命令处理的无知导致了这个问题。如果我要 ssh 到机器,“which hg”会导致 cygwin 感知二进制文件“/usr/local/
  • 你完全正确。我自己对远程 ssh 命令处理的无知导致了这个问题。如果我要 ssh 到机器,“which hg”会导致 cygwin 感知二进制文件“/usr/bin/hg”,但是如果我执行远程命令问题“ssh cjp@ungoliant 'which hg'”,它会返回我也在该机器上安装的 Windows 二进制文件的路径。

标签: windows macos mercurial clone freebsd


【解决方案1】:

我最终得到的是一种解决方法,而不是答案。

我自己对远程 ssh 命令处理的无知导致了一个误解。如果我要 ssh 到机器,“which hg”会导致 cygwin 感知二进制文件“/usr/bin/hg”,但如果我执行远程命令“ssh cjp@ungoliant 'which hg'”,它会返回路径到我也在该机器上安装的 Windows 二进制文件。

我使用了我的 .bashrc 文件,但无法通过远程命令执行来确定 cygwin 二进制文件的优先级。 PATH 甚至不包括 Windows PATH 条目,所以我开始解决这个问题并最终决定停止解决这个问题。

我已经放弃了整个想法,因为我相信即使我让它发挥作用,它也将是一个微妙的组合,根本不值得我花时间在它上面。我现在将我的存储库托管在 BSD 机器上,并且我在 Windows 机器上有一个 cron,它每 24 小时从该存储库提取一次到存档文件系统。它很简单,就像一个零问题的魅力。

【讨论】:

  • +1 因为这导致我尝试从 windows mercurial 可以看到的路径中拉出(ssh://foo//bar 而不是 ssh://foo//cygdrive/c/bar)。这很简单!
【解决方案2】:

我遇到了同样的问题,通过像这样添加选项 --remotecmd 解决了它

hg clone --remotecmd /usr/bin/hg ssh://me@mywindowspc//cygdrive/m/hgrepo

【讨论】:

    【解决方案3】:

    当您尝试 scp 时,您将执行以下操作:

    scp username@ipaddr:/cygdrive/d/test/foo.txt ./myDestFolder
    

    不幸的是,hg 不起作用。而是尝试:

    hg clone ssh://username@ipaddr/D:/testRepo
    

    【讨论】:

      猜你喜欢
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多