2011-03-06 72 views
0

当我将macfusion放入我的Ubuntu VM中,并且hg从bitbucket中克隆一些东西 - 然后尝试对其执行提交/导出/等操作时,一个名称前缀为'hg-checklinks-'的文件夹。Mercurial:通过NFS/SAMBA/SSHFS网络驱动器的hg-checklinks-recursive符号链接

在检查时,它似乎将一个永无止境的符号链链接回其父文件夹。这让我完全疯狂,到目前为止,我已经失去了对mercurial的信心。

请注意,当我在本地文件夹上使用它时似乎工作正常。有没有人有任何想法我可以解决这个问题......或甚至更多的信息,为什么发生?

干杯!

回答

4

DVCS的分散部分是在本地运行它 - 这应该比本地系统以外的任何其他做的唯一的Mercurial操作是pushpullclone。如果你从bitbucket克隆到你的Ubuntu虚拟机上,那么你应该从你的Ubuntu虚拟机克隆到你的Mac上并推送到Ubuntu虚拟机。

这就是说,它看起来像你的网络FS是不正确的删除文件,当它被告知。下面是相关的代码(在这里找到:https://www.mercurial-scm.org/repo/hg/file/a2dc8819bb0d/mercurial/util.py#l710):

name = tempfile.mktemp(dir=path, prefix='hg-checklink-') 
try: 
    os.symlink(".", name) 
    os.unlink(name) 
    return True 
except (OSError, AttributeError): 
    return False 

因此,无论您的网络FS是创建符号链接,但无论如何抛出异常或抛出异常时,要求删除(取消链接)的符号链接。

+0

嗯。感谢你 - 真正的信息。不知道该如何处理网络FS。关于克隆Ubuntu回购的好处很明显,但显然这意味着每当我对文件进行更改并想要预览时,我都必须进行一次推动 - 这并不是那么有趣。 – 2011-03-07 15:58:25

+0

就像我所说的,我试过NFS,Samba和SSHFS。这个问题只发生在我犯下的时候。这是很好的解决方法: – 2011-03-07 16:05:21

+0

我怀疑把'os.unlink(name)'放在'except'行之后,'return False'之前会阻止该文件出现,但是谁知道你的保险丝层可能注入了哪些其他错误,这是不容易看到的。唯一安全的行为是修改你的工作流,以推/拉网络并在本地提交 – 2011-03-07 16:39:24

0

这里的问题是SSHFS的非常特殊的“-o follow_symlinks”,它会高兴地创建符号链接固定,然后声称它无法创建它们,然后将它们显示为极好的递归不可移动目录。此错误选项可能会自动由Macfusion中的错误(https://code.google.com/p/macfusion/issues/detail?id=284)启用。所以如果有的话,你应该在sshfs和Macfusion中“失去信心”,而不是Mercurial。

这将在Mercurial 2.7中解决。同时,您应该可以在没有选项的情况下手动运行sshfs。

(为了更快的bug修复,请报告错误到水银/ SSHFS/macfusion项目,不是随机的互联网问题的论坛。)