与Mercurial混淆的情况

时间:2011-05-26 02:52:12

标签: python django mercurial

我遇到这种情况:

首先,我刚开始使用mercurial。 我有一个服务器,里面有我的django项目。

我想从本地计算机上的服务器上的项目目录克隆存储库。

我做到了这一点:

user@host> cd myproject
user@host> hg init
user@host> hg add
user@host> hg commit -m "Added initial files."

我用hg clone ssh://user@host//path/to/project克隆了回购。没关系,在我的电脑上,我已经在服务器上存放了所有文件。

现在,我想编辑settings.py来设置本地环境(数据库引擎和其他东西),但我不想更新服务器上的settings.py。编辑完成后,hg status会返回M settings.py。即使我在我的本地仓库中设置echo 'settings.py' > .hgignore,它也不起作用。对于目录staticmedia和工作目录中的数据库my_database也是如此。如何为服务器中的 NOT 更新和提交设置mercurial?

我想在我的计算机和服务器上工作,并使所有两个repo始终同步。

有人可以向我解释我该怎么办?我有点困惑。

谢谢!

3 个答案:

答案 0 :(得分:3)

它没有直接回答您的问题,但我发现管理本地设置的一种好方法是将它们放在一个单独的文件中(由SCM忽略)并将它们加载到settings.py中。

例如,将它放在settings.py:

的底部
 try:
   import settings_local
 except ImportError:
   pass  # Ignore when file doesn't exist

settings_local.py中的任何内容都会覆盖settings.py中的值。

修改

更直接地回答您的问题,请参阅Mercurial ignore file下的此答案。看起来不支持忽略已经版本化的文件。我以前用Subversion做过,所以我明白你为什么要尝试它。其他答案有一些解决方法。

答案 1 :(得分:2)

首先,如果settings.py已经提交,那么忽略它不会改变它。你需要先

$ hg remove settings.py
$ echo 'glob:settings.py' > .hgignore

(只是将文件名附加到.hgignore并没有做任何事情,我知道,但我知道有不同的格式。无论如何,也要注意这一点。)

答案 2 :(得分:1)

我可以回答你问题的一部分:

如果文件与忽略文件(.hgignore)中的模式匹配,则如果已被mercurial跟踪,则不会忽略该文件。这解释了为什么不会忽略对settings.py的编辑;这是因为settings.py已被跟踪。执行命令hg add时,将所有文件添加到存储库中;也就是说,mercurial开始跟踪它们(除了当时被忽略的任何东西)。