2011-05-26 77 views
2

我在這種情況下:與Mercurial混淆的情況

首先我剛開始使用mercurial。 我有一個服務器,有一個我的django項目。

我想從本地計算機上的服務器上的項目目錄克隆存儲庫。

我已經做到了這一點:

[email protected]> cd myproject 
[email protected]> hg init 
[email protected]> hg add 
[email protected]> hg commit -m "Added initial files." 

我克隆與hg clone ssh://[email protected]//path/to/project回購。沒關係,在我的電腦上,我擁有服務器上的所有文件。

現在,我想編輯settings.py設置本地環境(數據庫引擎和其他東西),但我不想更新服務器上的settings.py。編輯後,hg status返回我M settings.py。即使我在本地回購中設置了echo 'settings.py' > .hgignore,它也不起作用。對於工作目錄中的目錄static,media和數據庫my_database也是如此。我如何設置不是更新並在服務器中提交?

我想要在我的電腦和服務器上工作,並讓所有兩個repo始終保持同步。

有人可以善意解釋我該怎麼辦?我有點困惑。

謝謝!

+0

我可以找出settings.py,但爲什麼你不想靜態/媒體同步? – 2011-05-26 03:09:59

+0

因爲在靜態中有'django.contrib.auth'靜態文件(管理面板與CSS,JS),並在媒體中有頭像圖像,網站圖像和其他東西。只有media/css和media/js包含我想要同步的文件。 – 2011-05-26 20:56:58

回答

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做過,所以我明白你爲什麼要嘗試它。其他答案有一些解決方法。

+0

您不能*從Mercurial記錄中刪除文件,然後忽略它? – 2011-05-26 03:09:11

+0

@Eli我相信你可以(看到其他答案),但如果你能做出初步的改變,這是一個更好的長期實踐。 – 2011-05-26 03:10:34

+0

我同意你的答案的第一部分是解決OP問題的好方法。剛剛回答.hgignore評論 – 2011-05-26 03:17:39

2

首先,如果settings.py已經提交,那麼忽略它不會改變這一點。你需要先

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

(在追加的文件名.hgignore不會做任何事情,我知道,但我知道有不同的格式這一點。無論如何,意識到這一點,以及。)

+0

是真的,但顯然不是他想要的。 – Ringding 2011-05-26 07:54:37

1

我可以回答你的問題的一部分:

如果一個文件相匹配的忽略文件(.hgignore)的模式,則不能忽略,如果它已經被善變的跟蹤。這解釋了爲什麼對settings.py的編輯不會被忽略;這是因爲settings.py已被跟蹤。當您執行命令hg add時,會將所有文件添加到存儲庫中;也就是說,mercurial開始跟蹤他們(除了當時被忽略的任何東西)。