2012-06-05 51 views
4

我,做自动异地复制,这使得它托管的Mercurial库的理想地点在Windows服务器上运行的文件系统归档Mac和FreeBSD的客户从cygwin的托管库中进行克隆时并确保他们的安全。这个文件系统只有Windows,所以我别无选择,只能使用Windows作为主机操作系统。“(.hg未找到)”通过ssh

设置:

服务器( '昂哥立安',内部以我的网络):

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

客户端:

  • 的Mac OSX 10.7.4运行汞柱2.1.2
  • FreeBSD的8.3运行汞柱上的客户端2.1.2

问题(在Mac和FreeBSD相同) :

$ hg clone ssh://[email protected]//cygdrive/j/mercurial/rcstudio 
running ssh [email protected] '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 [email protected]:/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 

我发现很多计算器问题,其中问题是格式不正确的SSH URI ......我的格式是否正确,并说明绝对路径。

我已确认所有以下内容:

  • 汞柱命令在服务器上,并通过ssh运行良好。
  • 如果我粘贴绝对路径,我可以通过ssh确认.hg目录的存在。
  • 其他汞柱命令手动通过ssh发出成功(例如:SSH CJP @昂哥立安 'CD/cygdrive/J /水银/ rcstudio; hg的差异;')。
  • 在主机上,我可以从同一绝对路径本地克隆。

我在这里难住了。 Mercurial文档听起来像2.1.2应该能够从1.9.3父母中克隆出来,所以它看起来不是版本冲突。

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

+1

当通过ssh访问您的repo时,会使用哪个'hg'二进制文件?也许在那里有一个非cygwin二进制文件,它不能处理cygwin路径,而是期望'j:\ mercurial \ rcstudio'。 – Rudi

+0

你完全正确。我自己对远程ssh命令处理的无知导致了这个问题。如果我将ssh发送到机器,那么“which hg”带有cygwin-aware二进制文件“/ usr/local/ – Rjak

+0

你完全正确,我自己对远程ssh命令处理的无知导致了这个问题。机器,“哪个hg”导致cygwin意识到的二进制“/ usr/bin/hg”,但如果我做了一个远程命令问题“ssh cjp @ ungoliant'hg'”,它返回了一个windows二进制文件的路径我也在该机器上安装了 – Rjak

回答

4

我已经结束了一个解决方法,而不是答案。

我自己的SSH远程命令处理导致无知的误解。如果我将ssh发送到机器,“哪个hg”由cygwin-aware二进制文件“/ usr/bin/hg”产生,但是如果我做了一个远程命令“ssh cjp @ ungoliant'hg'”,它返回路径到一个Windows二进制文件,我也已经安装在该机器上。

我玩我的.bashrc文件,无法获得远程命令执行优先级的cygwin二进制文件。 PATH甚至没有包含Windows PATH条目,所以我开始对这个问题进行黑客攻击,并最终决定停止与之对抗。

我已经放弃了整个想法,因为我确信,即使我将它运用起来,它也会是一件微妙的杂物,根本没有值得花费在它上面的时间。我现在将我的存储库托管在一个BSD盒子上,并且我的Windows机器上有一个cron,它每24小时从该存储库拖到档案文件系统中。它很简单,并且像一个毫无问题的魅力一样工作。

+2

+1,因为这导致我尝试从mercurial的窗口可以看到的路径('ssh:// foo // bar'而不是'ssh:// foo // cygdrive/c/bar'),那很简单! – SingleNegationElimination

1

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

hg clone --remotecmd /usr/bin/hg ssh://[email protected]//cygdrive/m/hgrepo