远程更新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
作为解决方法,我做了以下工作:
hg update
- 成功!hg revert html/image/image.gif
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
答案 0 :(得分:2)
服务器上的文件权限是否可能被执行推送的人员覆盖?
例如,如果两个不同的人完成了推送(并因此更新),则第二个人将无法覆盖第一个人的推送触发更新所创建的文件。
也许尝试将钩子更改为此测试(你的钩子上实际上没有那些单引号,对吧?):
[hooks]
changegroup = hg --debug update
如果是权限问题,通常的解决方法是将每个将推送和更新的人放入同一个组(我称之为'hg'),然后使用repo中所有目录上的粘性组位来制作确定新文件有该组。