【问题标题】:How to rename a directory in Mercurial and continue to track all file changes如何在 Mercurial 中重命名目录并继续跟踪所有文件更改
【发布时间】:2011-04-01 22:19:15
【问题描述】:

我决定重命名我的家庭/爱好 Python 包中的一些目录(docdocstesttestsutilutils)因为,现在我想多了关于它,我认为新名称更合适。我现在的一般想法是,如果容器以其内容命名,则它们的名称应该是复数名词。

现在我已经为我的下一个hg commit 做好了准备,我想知道如何将这些目录名称更改告诉 Mercurial。一般来说,我是 RCS 软件的新手,并且只使用 Mercurial 几个月。当我运行hg status 时,它会显示这些目录中的所有文件都被删除和添加,所以我担心如果我只是执行hg addremove 我会丢失这些目录中文件的所有更改历史记录,或者在至少,变更历史将变得支离破碎且无法追踪。我遇到过hg rename 命令,但文档只讨论了它对单个文件的用途,而不是目录。

在进一步阅读 Bryan O'Sullivan 的“权威指南”后,rename 似乎可以引用目录。

这就是我决定尝试的方法:

hg rename --after doc docs
hg rename --after test tests
hg rename --after util utils
hg status
hg addremove

谁能告诉我这是否是在 Mercurial 中重命名目录的公认和首选方法,如果不是,我应该怎么做。

【问题讨论】:

    标签: python mercurial


    【解决方案1】:

    由于您已经重命名了目录,这完全没问题。 (如果您让 Mercurial 为您重命名它们:hg rename doc docs 等,而不是自己做然后让 Mercurial 知道,这将为您节省一个手动步骤。

    如果您没有任何其他文件要签入,hg addremove 是多余的。查看hg stat 的输出,您应该只会看到以“R”(用于doc/*test/*util/*)和“A”(用于docs/* 等)开头的行

    最后,不要忘记提交更改。

    编辑:忘了说...使用hg log --follow 来跟踪重命名过程中的更改。

    【讨论】:

      【解决方案2】:

      Mercurial 没有目录的概念;它将所有内容(文件和目录)视为文件。另外,我通常从不手动重命名文件或目录;我只是使用

      hg 重命名旧名称新名称

      我建议你也这样做。

      Mercurial 提供重命名跟踪功能,这意味着 mercurial 可以跟踪已重命名文件的完整历史记录。如果你手动重命名它,它是不可能的。

      但是,由于您已经手动重命名它们,因此您需要使用 --follow 参数和 hg log 来跟踪历史记录中的文件更改。

      我个人会选择hg rename,它应该是首选方法。

      【讨论】:

      • 更正:Mercurial 不将目录视为文件;它忽略了它们。您无法跟踪目录。
      【解决方案3】:

      使用 --after 而不是使用 hg 重命名的一个原因是,如果您使用的重构工具不仅仅是重命名,例如还修复了引用。

      【讨论】:

      • 这是一个大问题,如果您没有使用 Visual Studio 的 hg 插件。
      猜你喜欢
      • 1970-01-01
      • 2010-11-15
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多