2010-05-18 143 views
48

我在我的項目中有一個數據庫設置的文件,我設置了一些默認值。該文件由Mercurial跟蹤並簽入。由於該文件將用不同的值編輯各種開發人員機器,有沒有辦法讓Mercurial忽略此文件的新更改?Mercurial:如何忽略對被跟蹤文件的更改

我試着將文件添加到.hgignore文件中,但由於文件被跟蹤,所以不會被忽略。這在其他情況下是可以的,但是我想知道我能做些什麼嗎?

回答

23

使用文件模板絕對是最好的解決方案。 例如,如果你有一個database.ini文件,犯了database.ini.template文件,並在.hgignore

+0

這是我結束了做:) – Svish 2010-05-25 17:42:01

+0

我意識到這是現在很舊了,但以防萬一 - 你會有一個安裝腳本,將所有模板文件複製到他們的功能文件名? – Nick 2013-06-18 17:28:36

+0

這將是一個好主意。不要忘了讓你的腳本詢問配置值,因爲它們可能與模板文件不同,這裏顯示的是文件的結構 – yanjost 2013-06-26 13:54:25

8

沒有真正自動化的過程,但你可以嘗試(如本SO question)的-X選項上hg commit

% hg stat 
M myfile 
% hg commit -X 'myfile' 

(其他的解決方案可能涉及shelve or hq

然而,這並不「正確的」解決方案。我寧願推薦版本:

  • 文件模板
  • 能夠生成最終的文件(修改,但可以完全忽略)
2

通常你需要檢查的參考腳本複製文件並跟蹤它,然後讓開發人員製作一份用於本地開發的副本,但您並不希望開發人員爲自己的環境編輯源代碼管理文件。

如果您的配置系統支持它,如果您可以使用覆蓋文件來覆蓋參考副本中的值(例如數據庫連接字符串),則更容易。這樣,開發人員只需保留一個非常小的本地覆蓋值集。

27

忽略database.ini如果你總是想忽略這個文件,你可以爲commit添加-X選項爲默認你.hg/hgrc配置文件:

[defaults] 
commit = -X program.conf 
+3

這真是個好主意,直到你嘗試提交一個合併。提交合並時,不允許指定文件或模式。因此,在你的'.hgrc'中,如果沒有首先編輯'.hgrc',似乎就不可能提交合並。有沒有人有解決方案? – Yitz 2014-02-13 10:28:55

+2

@Yitz之前你問過這個年齡段,但萬一它有幫助,我使用的一個快速和骯髒的修復程序是有一個快速批處理腳本,將repo hgrc移出,執行並將其移回。如果你的hgrc中沒有其他東西需要在那裏,那顯然只會起作用。 – 2015-09-11 13:53:58

+0

@yitz我不知道它不適合你的原因是因爲該文件應該被稱爲hgrc,而不是.hgrc? – teaman 2017-12-15 22:34:28

3

如果使用TortoiseHG,打開了回購的設置,進入提交部分(第二圖標下左)&添加文件名(S)的自動排除在名單右(從列表底部開始〜3)。

http://tortoisehg.bitbucket.io/manual/0.9/commit.html

+1

執行此操作並運行提交UI時,排除的文件將在提交文件列表中(自動)取消選中,並且DIFF將呈深灰色。尼斯。 – 2014-10-21 18:53:16

+0

我無法得到這個工作,我正在使用TortoiseHg 3.3.3。我使用*添加文件名,完整路徑,部分文件名 - 它總是在提交UI中檢查? – gakera 2016-01-28 10:51:25

+0

如果它已經被追蹤(以前提交),那麼忽略它不會影響它,你需要「忘記」它。 – 2016-01-28 12:24:40

12

我們寫這個擴展名爲exclude。它會自動在支持它們的命令上添加-X選項 - 因此hg statushg commit將不會看到修改後的文件。它的工作方式是從您的存儲庫的根目錄中讀取.hgexclude文件,就像.hgignore文件一樣。您添加要排除在那裏的文件:

syntax: glob 
db.conf 

延長工作得很好,但有一個已知的情況下失敗:合併和提交遵循合併(這是記錄在wiki) 。這需要改進,以便將修改保存到臨時文件中,然後再恢復它們。如果您需要此功能,請與我們聯繫。

-2

它可能看起來不直觀,但:

hg rm -Af [file] 

兩個標誌同時聲稱,該文件已被刪除,並且該變化應強制(而不是拆除應強制爲幫助提示) 。 A(after)和f(force)標誌的幫助和文檔顯然不是100%準確的。

在Mercurial 2.0中爲我工作,同時要求歸檔命令不包含該文件。但是,如果其他開發人員克隆回購,這應該不成問題。他們會得到原始版本,不應該從他們的工作目錄中刪除。

來源:https://www.mercurial-scm.org/pipermail/mercurial/2008-June/019671.html

+2

這實際上並沒有工作:該文件從版本控制中刪除,這意味着它不是一個新的克隆的一部分,它也將被刪除,如果你'hg update' :把它想象成一個正常的'hg remove',只是把文件留在**你的**工作副本中,其他克隆人不會「看到」 - 「之後」和「--force」標誌,所以對他們來說這只是一個正常的刪除,所以文件被刪除時,他們更新。 – 2012-03-29 07:10:39

1

如果該文件已被跟蹤,可以發出忘記命令將文件。如果您在使用TortoiseHg時只需在提交期間右鍵單擊該文件並選擇忘記。該文件還必須已經在忽略列表中。

我遇到了和你一樣的問題,我的文件不斷出現在每一次提交中 - 儘管它已經在忽略列表中。我嘗試了忘記命令,它做到了。

+0

excelent!幫了很多! – icesar 2012-08-17 22:50:15

2

您可以試試hg forget。 有關更多詳細信息,請參見official manual about the same command。 它爲我工作。

我想,這樣的事情是更接近正確答案原來的問題水銀:如何忽略更改爲跟蹤文件,而不是其他人則建議模板等

+3

這個答案等同於愛爾蘭的答案。它的問題是'hg忘記'從文件中刪除文件的現有內容倉庫,這是OP不想要的。 – Brilliand 2013-11-27 22:53:20