Tortoisehg推送或提交失败,“ret 255”

时间:2017-03-08 17:09:17

标签: mercurial tortoisehg

我一直在使用Tortoisehg一段时间,几乎没有问题,但刚遇到以下问题:

我无法推送或提交到我的主存储库。我对我的项目中的一个文件做了一个小改动,在本地提交没有任何问题,但推送到主回购失败了:

% hg --debug push "Z:\[main repo]"
pushing to Z:\[main repo]
query 1; heads
searching for changes
all remote heads known locally
listing keys for "bookmarks"
1 changesets found
list of changesets:
09d372b8d90710f2ad772dc4164fd640d6869208
adding changesets
add changeset 09d372b8d907
adding manifests
adding file changes
adding GEM.py revisions
transaction abort!
rollback completed
abort: Permission denied: Z:\[main repo]\.hg/store\data\._g_e_m.py.i-dmz4wn
[command returned code 255 Thu Mar 09 14:17:01 2017]

主要仓库在(Windows)文件服务器上,我从Windows机器提交。我确信我没有用完配额。 我没有更改主回购的权限,我是所有数据的所有者,并且还尝试为自己分配“完全控制”(默认情况下我只有读写 - 不确定区别是什么,实际上),无济于事

我还尝试在主回购中编辑已更改的文件并提交到那里:

% hg commit --verbose "--message=GEM.py: [message]" --user [user] -- "Z:\[main repo]\GEM.py"
GEM.py
trouble committing GEM.py!
abort: Permission denied: Z:\[main repo]\.hg/store\data\._g_e_m.py.i-kbxvue
[command returned code 255 [date]]

现在,一个有趣的事情是,Mercurial抱怨的文件似乎并不存在。该目录中只有一个名为_g_e_m.py.i的文件。我确保在文件管理器中显示隐藏文件,我也从Linux看过,只是为了确保。 我还尝试将repo克隆到不同的位置,然后推送到新的repo,但这没有任何改变。

我在此网站上找到this answer,但我在repo文件夹中没有文件.hg/wlock(或类似名称)。

更新 因为被问到:主仓库上.hg / store / data目录的权限是:

.hg [domain]\Domain Admins:(I)(OI)(CI)(F)
    NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
    [domain]\[user]:(I)(OI)(CI)(M)

在我当地的,是:

.hg Everyone:(I)(OI)(CI)(F)

所以有区别。在.hg目录中,可能是因为我在尝试单独解决问题时弄乱了权限,这就是:

store\data [domain]\[user]:(OI)(CI)(F)
           CCNT\Domain Admins:(I)(OI)(CI)(F)
           NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
           [domain]\[user]:(I)(OI)(CI)(M)

是的,这是我的用户名,两次。我可能在更改权限时违反了一些约定...我对Posix权限没问题,但这对我来说有点不透明。

一个潜在的线索:在问题出现之前,tortoisehg很可能崩溃,或者网络连接丢失。我在家里使用VPN,这种事情可能会发生。因此,如果Mercurial阻止任何文件/目录,可能会有一些块,但我不知道如何验证/修复它。自问题出现以来,可能已经负责阻止目录的所有计算机都已重新启动 - 当然除了托管数据的文件服务器。

我还更新了上述语句以添加--debug输出。文件名后面的随机字母/数字发生了变化,因为我对文件进行了一些更改。这表明它确实不是那个特定的文件(无论如何都不存在),而是mercurial试图写入的目录。

2 个答案:

答案 0 :(得分:1)

我不太确定我的问题是什么原因,但这是我绕过它的方式:

  • 我将远程存储库克隆到我的本地计算机上
  • 我打开了我的本地仓库,点击了“同步”按钮并将默认路径从功能失调的远程仓库更改为新克隆的仓库
  • 我推动了改变 - 工作正常!
  • 我将“本地化”远程仓库克隆回网络驱动器
  • 我再次将本地仓库的默认路径更改为新的远程克隆
  • 我用另一个提交和推送测试了新的远程仓库,影响了同一个文件,而且一切正常。

现在一切都还好,虽然我一开始还不知道出了什么问题,为什么在网络驱动器中克隆没有帮助,但克隆到本地回购呢。 我最好的猜测是它是Windows(7?Server?)定义文件权限的方式,以及Tortoise和/或Mercurial在推送/克隆时设置它们的方式。

我当然希望这不会很快再次发生,因为如果我现在必须更频繁地这样做,那会非常烦人。

<强>更新

问题再次出现,也发生在其他回购中。它必须是在共享驱动器上推送到repo时发生的事情,但不是每次都发生。可能是在推动新头时,或者在推动之前没有拉动共享仓库中的更改时。我发现.hg/子目录中文件的扩展属性存在一些差异,但我对Win7 / server扩展属性和torrtoiseHG的工作方式都不太熟悉,无法理解这一点。

我现在已经停止使用该特定的共享驱动器并切换到使用NAS设备,但问题不会发生在那里。

答案 1 :(得分:0)

TortoiseHg推“ret 255”是90%的权限问题。 如果您使用来自服务器的共享文件夹检查当前用户的Mercurial存储库权限,请为此用户的文件夹添加“修改”和“写入”权限。 另外,检查属性,它不应该是“只读”。

我的网络中的一个用户遇到了同样的问题,这有助于我让他工作。 如果有人有另一个问题并成功解决了它,请添加评论。