如何在Mercurial中重命名目录并继续跟踪所有文件更改

时间:2010-08-21 00:03:47

标签: python mercurial

我决定将家庭/业余爱好Python包中的一些目录(doc重命名为docstest改为testsutil改为{{1因为,现在我已经考虑了更多,我认为新名称更合适。我现在的一般想法是,如果容器以其内容命名,则其名称应为复数名词。

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

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

所以这就是我决定尝试的事情:

rename

有人能告诉我这是否是在Mercurial中重命名目录的可接受和首选方法,如果没有,我该怎么做。

3 个答案:

答案 0 :(得分:39)

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

如果您没有其他任何要检入的文件,则hg addremove是多余的。查看hg stat的输出,您应该只看到以'R'开头的行(doc/*test/*util/*)和'A'({{1}等等。)

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

编辑:忘记说...使用docs/*跟踪重命名的更改。

答案 1 :(得分:16)

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

  

hg重命名旧名新名称

我建议你也这样做。

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

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

就个人而言,我只是选择hg rename,这应该是首选方法。

答案 2 :(得分:10)

使用的一个原因是 - 而不是使用hg重命名是因为您使用的重构工具不仅仅是重命名,例如还修复了参考文献。