我一直在使用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试图写入的目录。
答案 0 :(得分:1)
我不太确定我的问题是什么原因,但这是我绕过它的方式:
现在一切都还好,虽然我一开始还不知道出了什么问题,为什么在网络驱动器中克隆没有帮助,但克隆到本地回购呢。 我最好的猜测是它是Windows(7?Server?)定义文件权限的方式,以及Tortoise和/或Mercurial在推送/克隆时设置它们的方式。
我当然希望这不会很快再次发生,因为如果我现在必须更频繁地这样做,那会非常烦人。
<强>更新强>
问题再次出现,也发生在其他回购中。它必须是在共享驱动器上推送到repo时发生的事情,但不是每次都发生。可能是在推动新头时,或者在推动之前没有拉动共享仓库中的更改时。我发现.hg/
子目录中文件的扩展属性存在一些差异,但我对Win7 / server扩展属性和torrtoiseHG的工作方式都不太熟悉,无法理解这一点。
我现在已经停止使用该特定的共享驱动器并切换到使用NAS设备,但问题不会发生在那里。
答案 1 :(得分:0)
TortoiseHg推“ret 255”是90%的权限问题。 如果您使用来自服务器的共享文件夹检查当前用户的Mercurial存储库权限,请为此用户的文件夹添加“修改”和“写入”权限。 另外,检查属性,它不应该是“只读”。
我的网络中的一个用户遇到了同样的问题,这有助于我让他工作。 如果有人有另一个问题并成功解决了它,请添加评论。