gpt4 book ai didi

mercurial - .hgignore没有为特定用户解析

转载 作者:行者123 更新时间:2023-12-04 03:54:50 24 4
gpt4 key购买 nike

我有一个受版本控制的项目,比如/project和位于.hgignore/project/.hgignore。它的语法似乎是正确的,但是问题是,对于某些用户,此文件将被完全忽略,而对于其他用户,仍将对其进行分析。

说,运行

su -l dipsy -c 'cd /project; hg status'

显示正确的结果,忽略正确的文件,而
su -l laalaa -c 'cd /project; hg status'

还输出 /project/.hgignore中列出的文件。

我已经检查过的内容:
  • ~/.hgrc文件对于两个用户而言都是相同的,因此hg showconfig的输出也是如此。
  • 两个用户都可以读取/project/.hgignore并对其进行写入。

  • 我想念什么?

    (以防万一:Debian Lenny,Mercurial 1.6.3)

    //很抱歉,如果用户名看起来很愚蠢,那么它们不是真实的(:

    -添加2010-11-26-

    PS。有什么方法可以启动hg并在处理 .hgignore -s时获取调试输出吗? hg --debug statushg status --debug不会打印任何有意义的内容。

    -添加2010-11026-

    调试 hg status(结果有所不同):
    # su -l dipsy -c 'cd /project; strace hg status 2>&1 >/dev/null | grep hgignore'
    open("/project/.hgignore", O_RDONLY|O_LARGEFILE) = 4
    fstatat64(4, ".hgignore", {st_mode=S_IFREG|0664, st_size=214, ...}, AT_SYMLINK_NOFOLLOW) = 0
    write(1, "M .hgignore\nM foo/bar/baz"..., 4096) = 4096

    # su -l laalaa -c 'cd /project; strace hg status 2>&1 >/dev/null | grep hgignore'
    write(1, "M .hgignore\nM foo/bar/baz"..., 4096) = 4096

    调试 hg status --ignore(结果相同):
    # su -l dipsy -c 'cd /project; strace hg status --ignore 2>&1 >/dev/null | grep hgignore'
    open("/project/.hgignore", O_RDONLY|O_LARGEFILE) = 3
    fstatat64(3, ".hgignore", {st_mode=S_IFREG|0664, st_size=214, ...}, AT_SYMLINK_NOFOLLOW) = 0

    # su -l laalaa -c 'cd /project; strace hg status --ignore 2>&1 >/dev/null | grep hgignore'
    open("/project/.hgignore", O_RDONLY|O_LARGEFILE) = 3
    fstatat64(3, ".hgignore", {st_mode=S_IFREG|0664, st_size=214, ...}, AT_SYMLINK_NOFOLLOW) = 0

    因此,在运行 /project/.hgignore时会读取 hg status --ignore,而在仅运行 hg status时会跳过。 WTF?

    最佳答案

    答案1-Dirstate存储库损坏

    昨晚我也遇到了这个问题,它使我无所适从,试图找出原因。我最终在dirstate repository corruption上找到了一个Wiki页面。涉及运行hg verify的第一步无效。第二步,克隆存储库,成功了!然后,我删除了原始的.hg目录,并将克隆的.hg目录复制到原始位置。

    我猜在您的答案中,涉及提交/推送的步骤可能已修复了存储库中的损坏。

    答案2-使扩展程序错误化

    在我最初解决问题并发布答案之后,问题继续出现,但是以另一种方式出现:Mercurial似乎部分遵守了.hgignore文件,但是我对此所做的任何更新都没有生效。我碰巧正在创建一个脚本来创建几个相关的存储库,不久后我发现我的机器内存不足。我运行了一个ps -e,所有这些hg进程都卡在内存中。所有这些进程都是inotify服务器。

    Inotify是Mercurial随附的扩展,它可以订阅工作目录中的所有更改,以提高大型存储库上hg status的性能。 inotify extension page提到“绝对必须将其视为实验性的”。看来inotify服务器中的某些错误阻止Mercurial意识到.hgignore文件已被更新,因此hg status始终使用过时的.hgignore版本。

    为了尝试我的理论并暂时让hg刷新.hgignore,我执行了以下命令:

    killall -s 2 hg

    此命令告诉所有驻留inotify服务器退出。 ( killall类似于 kill,但是将信号发送给具有给定名称的所有进程。 -s 2参数发送INT信号,允许inotify正常关闭。)

    在那之后,一切开始很好地运行,但是在执行hg之后,inotify服务器不断弹出。为此,我在 hgrc file中添加了以下代码段:
    [extensions]
    hgext.inotify = !

    这将禁用inotify扩展名( !指示Mercurial禁用扩展名)。我的存储库非常小,以至于我现在不需要它。

    关于mercurial - .hgignore没有为特定用户解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286430/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com