2010-11-03 103 views
2

當遠程更新Mercurial庫,我從被後推的遠程服務器上運行hg update命令得到下面的錯誤。我在網上尋找了一些幫助,但找不到有用的東西。在這一點上,我希望得到一些想法和/或洞察力,看看會導致這個問題。水銀HG更新退出,狀態255

的錯誤是略低於。推送兩個變更集時發生。一個變更集包括一個不相關的index.html文件更改。另一個變更集是一個合併,其中包括index.html更改以及兩個圖像文件的重命名。

[email protected]:/home/web/repository$ hg push 
pushing to ssh://10.10.1.12//home/web/repository 
searching for changes`remote: adding changesets 
remote: adding manifests 
remote: adding file changes 
remote: added 2 changesets with 1 changes to 1 files 
remote: abort: Operation not permitted: /home/web/repository/html/images/image.gif 
remote: warning: changegroup hook exited with status 255 

的附加細節:

  • 兩個圖像的大小10385個字節。 (是的,兩個圖像我發生這個錯誤)

  • 兩張圖片有他們的名字在嘗試將庫下拉到Windows電腦時已經推hg update d由於案件摺疊碰撞的變更改變。

  • 目標服務器可以在/ etc下鉤/水銀/ hgrc:

    [hooks] 
    changegroup = hg update
  • 作爲一種變通,我做了以下內容:

    1. 刪除Image.gif的。
    2. 刪除了產生錯誤的另一個圖像文件。
    3. hg update - 成功!
    4. hg revert html/image/image.gif
    5. hg revert html/image/otherimage.gif

在這一點上,我想更好地理解這個問題的原因,這樣我可以保證在一個堅實的,易於使用的實現我的環境。我真的很感謝你的幫助!


在鉤使用hg --debug update後,我收到這樣的輸出:

 
[email protected]:/home/web/repository$ hg push 
pushing to /home/web/staging/repository 
searching for changes 
adding changesets 
adding manifests 
adding file changes 
added 2 changesets with 1 changes to 1 files 
resolving manifests 
overwrite False partial False 
ancestor 58a5edb95c9a local 58a5edb95c9a+ remote 3aafb97b148c 
    searching for copies back to rev 6 
html/index.php: remote is newer -> g 
html/images/otherimage.gif.casefolding: update permissions -> e 
html/images/image.gif: update permissions -> e 
abort: Operation not permitted: /home/web/staging/repository/html/images/image.gif 
warning: changegroup hook exited with status 255 

其他權限信息:

  • 在2個變更集所有3個文件都與WEBUSER 775權限:dev用戶:組。

  • 我的全球hgrc文件的WEBUSER信任

    [trusted] 
    users = webuser
+0

也許有問題的文件的權限問題? – Amber 2010-11-03 19:37:20

+0

基於調試輸出,我必須同意。我在服務器上附加了有關權限的詳細信息。請讓我知道您如何解決此權限問題的想法。 – bitsoflogic 2010-11-03 20:22:52

+0

該評論顯示出一點混淆「2個變更集中的所有3個文件對webuser:dev user:group具有775權限」。變更集中的文件沒有文件權限(除執行外)或用戶或組 - 這些元數據不會被mercurial追蹤,因此它們不是變更集中文件的一部分。磁盤上的文件,無論是.hg文件還是工作目錄中的文件,都將擁有僅基於誰在運行寫入它們的mercurial命令的所有權和權限。在你的例子中是'levinaris',而不是webuser。 – 2010-11-03 20:51:06

回答

2

是否有可能在服務器上文件的權限是這樣的,它不能做推人被overwitten?

例如,如果兩個不同的人已經完成推送(並因此更新),第二個人將不能覆蓋由第一個人的推送觸發更新創建的文件。

也許嘗試改變鉤來此一試(你實際上並不會對你的鉤子的單引號,是吧?):

[hooks] 
changegroup = hg --debug update 

如果它是一個權限問題通常的解決方法是將所有將要推送和更新的人放入同一組(我稱之爲「hg」),然後使用repo中所有目錄上的粘性組位來確保新文件具有該組。

+0

我將編輯原始帖子。我在配置文件或錯誤輸出中沒有這些反引號。在這裏格式化我的文章是一個錯誤。 – bitsoflogic 2010-11-03 19:56:52

+0

我對權限並不積極......沒有問題更新的文件和導致「中止」錯誤的文件在文件系統上都具有相同的權限:由web用戶擁有,位於開發組中。我應該檢查其他權限嗎?也許Mercurial特定的? – bitsoflogic 2010-11-03 19:57:25

+0

我將'hg --debug update'的結果附加到我的原始文章中。請讓我想想你的想法。謝謝。 – bitsoflogic 2010-11-03 20:14:50