我使用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