Mercurial:“hg push”到 smb 共享不起作用
Posted
技术标签:
【中文标题】Mercurial:“hg push”到 smb 共享不起作用【英文标题】:Mercurial: "hg push" to smb share does not work 【发布时间】:2016-09-23 09:13:14 【问题描述】:我使用 Ubuntu 16.04 和 Mercurial 3.7.3。我们的存储库只能作为 SMB 共享访问。我将共享克隆到我的主文件夹中的一个文件夹(我稍微简化了名称):
> hg clone "/run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo" Repo
我的问题是我可以做任何事情(拉、提交等),但推送:
> hg push -v
pushing to /run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo
searching for changes
2 changesets found
uncompressed size of bundle content:
876 (changelog)
724 (manifests)
586 a.txt
2869 b.txt
34900 c.rpm
37325 d.rpm
abort: Operation not supported: '/run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo/.hg/store/journal'
如果我使用 sudo:
> sudo hg push -v
[sudo] password for kol:
pushing to /run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo
abort: repository /run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo not found!
提前感谢您的帮助!
更新
我在 Windows 7 中尝试了同样的方法,hg push
工作正常。
更新 2
SMB 共享位于 Windows 计算机上。
hg push
在 Ubuntu 上使用 --debug
选项的输出(我尝试推送的提交与上述不同):
> hg push -v --debug
pushing to /run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo
query 1; heads
searching for changes
all remote heads known locally
listing keys for "phases"
checking for updated bookmarks
listing keys for "bookmarks"
listing keys for "bookmarks"
1 changesets found
list of changesets:
9ce3f6fbf7217a7eea79cf21ccbb2d7fc851cbd3
bundle2-output-bundle: "HG20", 4 parts total
bundle2-output-part: "replycaps" 155 bytes payload
bundle2-output-part: "check:heads" streamed payload
bundle2-output-part: "changegroup" (params: 1 mandatory) streamed payload
bundle2-output-part: "pushkey" (params: 4 mandatory) empty payload
abort: Operation not supported: '/run/user/1000/gvfs/smb-share:server=xyz.com,share=abc$/Repo/.hg/store/journal'
【问题讨论】:
SMB 服务器在哪个系统(Linux / Windows 等)上运行? 另外,如果添加--debug
作为参数提供有用的信息,你能试试吗?当您尝试推送时,dmesg
是否显示任何有趣的东西?运行 dmesg | tail -f
可能有助于了解正在发生的事情。
@ManuelJacob 请看我的第二次更新。
@kol 挂载点很奇怪......如果你通过其他工具挂载你的 smb 文件共享,如cifs-utils
?
我遇到了同样的问题并遵循了@Vincent 的建议。我可以用 cifs 推动我不能用 gvsd 的地方。我必须在 /etc/fstab 中添加一行,以便使用 user
选项将 cifs 挂载为非 root,并为 samba 共享指定我的 username
。 (存在安全问题,我很乐意每次挂载时都输入密码,替代方案包括凭据文件,有关详细信息,请参阅 mount.cifs 文档)
【参考方案1】:
由于某种原因,这似乎不适用于挂载 GVFS 的目录。不过,CIFS 有效。因此,要推送到远程存储库,请通过 CIFS 挂载它。
sudo mount -t cifs -o user=your_remote_username,domain=your_remote_domain,uid=$(id -u),gid=$(id -g) "//remote.server.com/path/to/remote/directory" /media/your_user/smb-mount
确保设置您的远程 (SMB) 用户名和域。此外,如果服务器发送文件的所有权信息,可能需要添加forceuid,forcegid
选项。有关该命令的完整说明,请参阅Mount cifs Network Drive: write permissions and chown。
【讨论】:
【参考方案2】:请不要将网络文件系统用于任何版本控制系统。网络文件系统违反了大多数版本控制系统所依赖的一些一致性保证 - 您在日志文件中看到的几乎肯定是它的副作用。
相反,您可以在同一台机器上运行 http hg 服务器吗?这将显着降低您丢失数据的风险。
【讨论】:
以上是关于Mercurial:“hg push”到 smb 共享不起作用的主要内容,如果未能解决你的问题,请参考以下文章