4

我在一台 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
  • FreeBSD 8.3 运行 hg 2.1.2

客户端问题(在 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 父级克隆,所以它似乎不是版本冲突。

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

4

3 回答 3

4

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

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

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

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

于 2012-06-10T19:04:02.330 回答
1

我有同样的问题,通过添加选项--remotecmd 解决了这个问题

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

于 2013-10-25T09:02:23.897 回答
0

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

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

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

hg clone ssh://username@ipaddr/D:/testRepo
于 2014-03-21T10:06:03.350 回答