【问题标题】:Mercurial: Force delete after remote hg update hookMercurial:远程 hg 更新挂钩后强制删除
【发布时间】:2012-10-09 15:57:27
【问题描述】:

我们在远程存储库上设置了一个挂钩,以便在接收到推送后自动更新存储库。它工作得很好,除非我们在本地删除文件然后推送。我们收到这样的消息:

remote:  local changed path/to/file/file.ext which remote deleted
remote: use (c)hanged version or (d)elete? c

它会自动选择“c”。我们有没有办法让 Mercurial 使用 'd' 并删除文件?

这里是钩子,也张贴在 cmets 但希望换行符保留在这里:

[hooks]

changegroup = hg update >&2

incoming = /path/filename.sh > /dev/null 2>&1

.sh 文件在 hg 更新后重置一些权限。

【问题讨论】:

  • 请贴出钩子的代码。
  • 这里是钩子的代码: [hooks] changegroup = hg update >&2 incoming = /path/filename.sh > /dev/null 2>&1 .sh 文件在更新。

标签: mercurial mercurial-hook


【解决方案1】:

错误消息的意思是“您的本地工作副本包含更新尝试删除的修改文件。”

如果您在远程服务器上运行“hg st”(即在远程存储库中),您应该会看到修改后的文件。请注意,更改文件的权限被视为更改。

所以会发生这样的事情:

  • 您的本地 Mercurial 将文件推送到远程存储库
  • 挂钩更改远程存储库中的文件(通过修改其权限)。
  • 有人试图删除其中一个文件

Mercurial 始终尝试防止数据丢失,因此默认选项是“保留本地更改”(因为您以后可以随时删除这些文件,但您可能无法恢复它们)。

你能做什么?

  • 不要“修复”远程仓库的权限,而是拒绝接受具有错误权限的更改集。也就是说,不是修复权限,而是在pretxnchangegroup 挂钩中检查它们。如果权限错误,请中止。这样,只要权限被破坏,您就无法推送。 Docs.

  • 不要修改工作副本,而是将文件复制到新位置并更改那里的权限。这会浪费一些磁盘空间(但如果您使用软链接或硬链接,则不会像您想象的那么多),但它分离了关注点(特殊权限与版本化文件)。

[编辑]

新文件,在本地添加然后推送到远程仓库,松散执行权限。

他们没有失去它,他们一开始就没有它:Windows 不支持这个 Unix 功能。

很遗憾,you can't tell Mercurial to set the bit from Windows

要正确解决此问题,请使用以下方法:

  1. 像以前一样从 Windows 添加和推送文件
  2. 在 Unix 服务器上创建一个 cron 作业,检查权限并在发现错误时发送电子邮件。
  3. 收到邮件后,连接 Unix 服务器并修复权限
  4. 从 Unix 提交并推送更改。

如果您在 Windows 上修改文件,Mercurial 将保留执行位。

我建议将最后两个步骤放入脚本中。我不认为你可以完全自动化它。当有人在运行时推送更改时,脚本会(经常?)失败。

PS:我已提交功能请求,要求提供更好的解决方案:Provide a way to modify the Unix permissions from Windows

【讨论】:

  • 感谢您提供的信息。我们从 Windows 机器推送到 Red Hat。我们通过 Windows 机器上的 Red Hat 虚拟机测试文件,所有权限都很好。但是,一旦它们到达远程 Red Hat 服务器,它们就不再正确了。我不知道这是为什么。我们实际上确实使用了链接,但是两个位置的权限始终相同。我错过了什么?在这种情况下,有没有办法改变 Mercurial 的默认行为并允许它删除“修改”的文件?谢谢。
  • 权限如何变化?
  • 新文件,在本地添加然后推送到远程仓库,执行权限松动。
  • 啊,这就是我想知道的。
  • 感谢 Aaron 的输入并提交该功能请求。如何检查权限并对不正确的权限采取行动?如果我们能弄清楚这一点并且只修改问题文件,那么我们可能会有一个解决方案。我们希望这完全自动化。看来我们当前方法的问题是所有文件都在推送后重新应用了权限。即使权限没有“更改”,这也必须将所有文件标记为已修改。这听起来正确吗?重新应用完全相同的权限是否会将文件标记为 Mercurial 的“已修改”?
【解决方案2】:

一位同事向我指出了这一点,这可能是我们的解决方案:

https://bz.mercurial-scm.org/show_bug.cgi?id=3302

https://www.mercurial-scm.org/repo/hg/rev/95e45abe7e8e

我们还没有尝试,但我会在我们尝试后报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2013-12-26
    • 1970-01-01
    相关资源
    最近更新 更多