2010-04-21 57 views
4

我使用我的源代碼樹創建hg存儲庫。我想保留一些文件的第一個版本,如Makefile在存儲庫中,然後即使通過修改它,hg也不會看到它被修改。Mercurial - 如何停止跟蹤修改後的文件,但將第一個版本保存在存儲庫中

原始問題是,./configure通常會修改Makefile,但我不希望構建文件在存儲庫中提交。所以,我想保持配置和Makefile的只有第一個版本在倉庫中,這樣大家誰克隆我的倉庫可以運行通過自理./configure又懶得庫

我試圖hg removehg forget但這些停止跟蹤,並刪除下一次reporitory修訂版中的文件。

.hgignore也不會做這些事情。

我想到hg revert每次我運行./configure或使但它不是有效的方式。 有沒有更好的方法?

回答

2

它通常是好的形式而不是根本跟蹤configure腳本。這有一些原因:

  • 它的巨大。我見過代碼庫,其中配置腳本和輔助宏庫的數量是正在編譯的實際代碼的十倍以上。

  • 當其他開發人員對configure.in(.ac)進行更改時,他們將需要提交一個新的configure腳本。如果三個人這樣做,那麼Mercurial很可能會至少要求其中一個人員手動解決合併衝突configure本身。請記住,configure是機器生成的,試圖讀取它(更不用說解決合併衝突)可能會讓你的眼睛流血。

一般情況下,你會通過兩種方式提供源代碼形式的程序:

  • 釋放檔案下載(如foo-1.2.3-rc2.zip),這可以包含配置腳本。

  • 使用Mercurial直接下載存儲庫。如果他們想要使用它,他們需要安裝autoconf。

在我倉庫的根,我通常包括一個名爲autogen.sh文件運行所需的所有步驟(aclocalautoconf,...),也可以用來處理警告用戶,如果他們需要的東西安裝。即Could not find tool aclocal, please install the autoconf package.

它真的最好只是去autogen.sh方法。這意味着只跟蹤configure.in(或configure.ac)和相關的Makefile(來自Makefile.in)。讓每個構建自己配置,並提供一個distclean目標來刪除所有生成的文件configure。最後,提供一個maintainer-clean目標以刪除配置套件本身生成的任何內容,例如configure

這應該有助於使夜間生成容易。

+1

蒂姆死了。不要在存儲庫中保存任何可以自動生成的東西,如果你這樣做(用於備份?),請將它們保存在一個單獨的目錄中,在正常使用情況下它們不會被拾取/運行。 – 2010-04-21 14:37:06

相關問題