如何从 Mercurial 克隆中删除工作副本?

Posted

技术标签:

【中文标题】如何从 Mercurial 克隆中删除工作副本?【英文标题】:How can I remove the working copy from a Mercurial clone? 【发布时间】:2011-05-08 16:58:30 【问题描述】:

使用 mercurial 克隆存储库时,您可以传递 -U/--noupdate 标志来创建没有工作副本的克隆。如果我在克隆时忘记传递此标志,我可以删除工作副本吗?如果有,怎么做?

这在概念上类似于 this git question,但用于 mercurial。

【问题讨论】:

【参考方案1】:

Mercurial wiki 上的文档对裸存储库进行了以下说明:

"虽然这是一个小问题,但 Mercurial 显然可以处理 裸仓库;也就是说,没有工作副本的存储库。在 Git 中 你需要一个配置选项,而在 Hg 你只需要 检查空修订,如下所示:"

hg update null

null 版本类似于您刚刚完成hg init 时的空状态。它是修订版 0 的父版本(以及所有非合并修订版的第二个父版本),通过更新回它,您将再次获得一个空的工作副本。

链接可能看起来很讽刺:

https://www.mercurial-scm.org/wiki/GitConcepts

【讨论】:

啊哈!这就是诀窍。实时调频。或者在这种情况下是 RTFW。我读过“hg clone --help”,它确实暗示了这个解决方案......但前提是你知道答案。谢谢! @rq:这发生在我们所有人身上。我每周都有很多 RTFM 时刻。 如果还有剩余的文件,hg purge 可能有助于摆脱它们。 在 TortoiseHg Workbench 中,您可以通过 Repository > Update 并将 null 指定为 Update to: 来完成此操作【参考方案2】:
rm -rf *

这将删除所有“可见”文件(在 *nix 下)。由于 Mercurial 存储库存储在“隐藏”文件.hg 中,因此不会被触及。不幸的是,您自己的任何隐藏文件也不会,例如.hgignore

要恢复工作副本,我确信有一个 hg update 标志可以工作,但这也可以:

hg revert --all

【讨论】:

-1 完全不对。这是我尝试过的,并将整个工作副本标记为“!”已删除,这可能会使推送和拉动变得混乱。 @rq - 也许你应该在你原来的问题中这么说。就个人而言,我不知道为什么要复制没有工作目录的存储库。运行大量的推拉而不试图在两者之间进行构建是麻烦的秘诀。 一种用途是在网络驱动器上创建本地克隆的备份副本,使用自动推送到备份的提交挂钩。 绝对没有理由拥有本地工作副本,例如,在从 Web 服务器提供 mercurial 存储库时。

以上是关于如何从 Mercurial 克隆中删除工作副本?的主要内容,如果未能解决你的问题,请参考以下文章

Mercurial:我如何找出我的工作副本和另一个副本之间的区别

是否可以使用bazaar,mercurial或git进行部分克隆/分支?

如何在 Mercurial 中更新现有克隆存储库的 URL

Mercurial 中止:索引 ... 已损坏

使用mercurial克隆或拉到标记后如何获取标记变更集?

从 C# 克隆 Mercurial 存储库?