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

Python 如何在Mercurial中重命名目录并继续跟踪所有文件更改,python,mercurial,Python,Mercurial,我决定将我的home/hobby Python包中的一些目录重命名(doc为docs,test为tests,util为utils),因为现在我考虑了更多,我认为新名称更合适。我现在的一般想法是,如果容器是根据其内容命名的,那么它们的名称应该是复数名词 现在我已经准备好下一个hgcommit了,我想知道如何告诉Mercurial这些目录名更改。一般来说,我对RCS软件是新手,只使用Mercurial几个月。当我运行hg status时,它会显示这些目录中的所有文件都被删除和添加,因此我担心如果我只

我决定将我的home/hobby Python包中的一些目录重命名(
doc
docs
test
tests
util
utils
),因为现在我考虑了更多,我认为新名称更合适。我现在的一般想法是,如果容器是根据其内容命名的,那么它们的名称应该是复数名词

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

在进一步阅读布莱恩·奥沙利文的《权威指南》后,似乎
rename
可以引用目录

下面是我决定尝试的:

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

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

既然您已经重命名了目录,这是完全可以的。(如果您让Mercurial为您重命名文档:
hg rename doc
,等等,而不是自己动手,然后让Mercurial知道这一点,那么就可以节省一个手动步骤)

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

最后,不要忘记提交更改


编辑:忘了说。。。使用
hglog--follow
跟踪整个重命名过程中的更改。

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

hg重命名旧名称新名称

我建议你也这样做

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

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


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

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

我会采纳您的建议,让hg在将来进行任何重命名。感谢您的解释和提示。更正:Mercurial不将目录视为文件;它忽略了它们。您无法跟踪目录。如果您不使用visual studio的hg插件,这是一个大问题。