我使用Ubuntu我的工作站上,每当我尝试提交/推到位于在我的LAN CIFS共享一个Mercurial库,我得到这个错误抛出:abort: Operation not permitted: /media/repos/myRepo/.hg/journal.dirstate
必须是根推/提交含汞库
但是,在sudo
前面加上任何引起这个问题的命令,都会让mercurial继续下去,而不会向我抛出任何错误。
我应该怎么做才能停止sudo
每次提交?
我使用Ubuntu我的工作站上,每当我尝试提交/推到位于在我的LAN CIFS共享一个Mercurial库,我得到这个错误抛出:abort: Operation not permitted: /media/repos/myRepo/.hg/journal.dirstate
必须是根推/提交含汞库
但是,在sudo
前面加上任何引起这个问题的命令,都会让mercurial继续下去,而不会向我抛出任何错误。
我应该怎么做才能停止sudo
每次提交?
您的用户没有/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
(无论myuser
和mygroup
可选)
而且一定要使用chown
和chmod
递归地对整个存储库。如果每次都重新创建journal.dirstate
(我认为会发生这种情况),它将从.hg
目录继承它的权限,因此您在文件本身上更改的任何权限可能会丢失。
该问题可能与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
。
执行任何这些操作后,所有用户都应该能够再次推送。
修复您的存储库的权限(可能既是主人又是您的本地人)。 – robert 2012-01-05 13:42:25
做到了。 Chmod:ed已经达到777并且没有变化。 – Industrial 2012-01-05 13:45:30
如果您在'.hg'目录中显示'ls -la'的结果,这也有助于诊断问题。 – 2012-01-05 13:49:17