2012-01-05 947 views
3

我使用Ubuntu我的工作站上,每當我嘗試提交/推到位於在我的LAN CIFS共享一個Mercurial庫,我得到這個錯誤拋出:abort: Operation not permitted: /media/repos/myRepo/.hg/journal.dirstate 必須是根推/提交含汞庫

但是,在sudo前面加上任何引起這個問題的命令,都會讓mercurial繼續下去,而不會向我拋出任何錯誤。

我應該怎麼做才能停止sudo每次提交?

+1

修復您的存儲庫的權限(可能既是主人又是您的本地人)。 – robert 2012-01-05 13:42:25

+0

做到了。 Chmod:ed已經達到777並且沒有變化。 – Industrial 2012-01-05 13:45:30

+2

如果您在'.hg'目錄中顯示'ls -la'的結果,這也有助於診斷問題。 – 2012-01-05 13:49:17

回答

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

該問題可能與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

執行任何這些操作後,所有用戶都應該能夠再次推送。