2010-08-21 29 views
32

我决定在我家/嗜好重命名某些目录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 

谁能告诉我,如果这是在水银重命名目录中的接受和首选的方法,如果没有,我该怎么办了。

回答

38

由于您已将目录重命名,因此完全可以。 (如果你让Mercurial为你重命名,它会为你节省一个手动步骤:hg rename doc docs等,而不是自己做,然后让Mercurial知道它)。

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

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

编辑:忘了说...使用hg log --follow来跟踪整个重命名的变化。

+0

谢谢尼尔。这工作完美。 – 2010-08-21 02:07:51

15

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

汞重命名旧名新名称

我建议你做到这一点。

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

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

就我个人而言,我只是去hg rename它应该是首选的方法。

+0

我会接受你的建议,并让hg在将来做任何重命名。感谢您的解释和提示。 – 2010-08-22 05:59:24

+0

更正:Mercurial不会将目录视为文件;它忽略了它们。你不能跟踪目录。 – undefined 2015-07-31 18:08:42

9

使用之后的一个原因 - 用hg替代重命名是因为你使用的重构工具不仅仅是重命名,还修复了引用。

+0

这是一个大问题,如果你不使用视觉工作室的hg插件。 – 2011-12-01 11:26:59

相关问题