Mercurial HG更新退出状态255

时间:2010-11-03 19:31:50

标签: mercurial permissions

远程更新Mercurial存储库时,我在推送后在远程服务器上运行的hg update命令中收到以下错误。我在网上寻找了一些帮助,但找不到任何有用的东西是不成功的。在这一点上,我希望能够提出一些想法和/或洞察力来解决导致这个问题的原因。

错误就在下方。推送两个变更集时发生了。一个变更集包括不相关的index.html文件更改。另一个变更集是合并,其中包括index.html更改以及两个图像文件的重命名。

levinaris@server01:/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 PC时,由于案例折叠冲突,这两个图像的名称在已推送的变更集中已更改hg update d。

  • 目标服务器在/ etc / mercurial / 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之后,我收到了这个输出:

levinaris@server01:/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:dev user:group拥有775权限。

  • 我的全球hgrc文件具有受信任的webuser

    [trusted]
    users = webuser

1 个答案:

答案 0 :(得分:2)

服务器上的文件权限是否可能被执行推送的人员覆盖?

例如,如果两个不同的人完成了推送(并因此更新),则第二个人将无法覆盖第一个人的推送触发更新所创建的文件。

也许尝试将钩子更改为此测试(你的钩子上实际上没有那些单引号,对吧?):

[hooks]
changegroup = hg --debug update

如果是权限问题,通常的解决方法是将每个将推送和更新的人放入同一个组(我称之为'hg'),然后使用repo中所有目录上的粘性组位来制作确定新文件有该组。