必须是root才能推送/提交到mercurial存储库

时间:2012-01-05 13:36:46

标签: mercurial sudo

我在我的工作站上使用Ubuntu,每当我尝试提交/推送到位于我的LAN中的CIFS共享上的Mercurial存储库时,我都会抛出此错误:abort: Operation not permitted: /media/repos/myRepo/.hg/journal.dirstate

但是,在使用sudo之前添加任何导致此命令的命令时,会让mercurial继续运行而不会给我带来任何错误。

我该怎么做才能停止每次提交sudo

2 个答案:

答案 0 :(得分:3)

您的用户没有/media/repos/myRepo的写入权限。您可以使用ls -la检查所有者和权限。根据结果​​,您应该:

尝试使用chmod更改权限,以允许您的用户或群组访问。

sudo chmod -R ug+w /media/repos/myRepo

ug+w表示为群组和所有者用户添加写入权限,如果您与所有者位于同一群组中,这将有效。否则,您可以尝试只添加+w它适用于所有用户,但不太安全。)

尝试将chown的所有者更改为您的用户或群组。

sudo chown -R <myuser>:<mygroup> /media/repos/myRepo

myusermygroup都是可选的)

还要确保在整个存储库中递归使用chownchmod。如果每次都重新创建journal.dirstate(我认为会发生什么),它会从.hg目录继承其权限,因此您在文件本身上更改的任何权限都可能会丢失。

答案 1 :(得分:1)

问题可能与2.1.2之前的Mercurial版本中与失败事务相关的bug有关。

如果hg push在操作中途失败,问题就会突然出现。例如,由于网络中断或服务器端的挂钩中止事务,可能会发生这种情况。这可能导致陈旧文件journal.dirstate留在服务器端.hg目录中。

从此时起,journal.dirstate或root用户以外的任何用户都无法推送,无论journal.dirstate上的文件权限如何。这是因为在推送过程中,Mercurial会尝试将chmod文件发送给执行推送的用户,并提供您观察到的错误:Operation not permitted

要解决此问题,您可以尝试以下任一方法:

  • 让文件journal.dirstate的所有者成功推送。应该在过程中清理过时的文件;或

  • 将Mercurial的服务器版本更新为2.1.2或更高版本;或

  • 删除服务器端的文件journal.dirstate

执行上述任何一项后,所有用户都应该再次推送。