2012-05-12 39 views
4

我想在我的源代碼文件的頂部嵌入一些版本信息,其中包含版本號,作者和編輯日期等信息。如何使用Mercurial在源代碼中嵌入版本信息

有沒有一種簡單的方法來與Mercurial做到這一點?

+1

作者在寫入文件時基本上是固定的,不是嗎?除非你想讓它成爲編輯文件的最後一個人。儘管如此,這還是一個小問題。通常,DVCS(甚至是一些集中的VCS,如ClearCase)可避免將版本元數據放入文件中。因此,例如,您無法輕鬆獲取影響嵌入到文件中的文件的最後一個提交編號,也無法確定發生該事件的日期。我仍然使用一個古老的VCS(更確切地說是RCS),因爲我重視那個能力,並且我的發佈系統也是圍繞它而建立的。因爲這個,我沒有切換到Git或Mercurial或SVN。 –

+2

另請參閱我的[討論](http://stackoverflow.com/questions/645008/what-are-the-basic-clearcase-concepts-every-developer-should-know/645424#645424)(或者是一個謾罵)關於'嵌入式版本號 - 好還是壞'。 –

+0

可能重複的[文件歷史記錄:在源文件或讓scm處理它?](http://stackoverflow.com/questions/929824/file-history-in-the-source-or-let-scm-handle-it ) – ChrisF

回答

3

正如評論和其他答案所提到的,依靠類似CVS的自動擴展標籤並不是一個好主意。特別是因爲你可以在任何時候提取你需要的任何元信息,之後幾乎可以提取任何粒度。

但是,如果你真的需要它(因爲你的老闆這麼說),最接近你可以通過使用與mercurial捆綁在一起的keyword extension

+1

下面是關於關鍵字擴展的「爲什麼你不需要它」頁面:http://mercurial.selenic.com/wiki/KeywordPlan#head-2007fad6f31bf6f1f1b5c3d5b02e5c6225de3ec5我很確定這是從Mercurial的主要作者的評論中得出的,誰積極建議不要延期。 –

4

這在Stackoverflow上已經被問到很多了,簡短的回答是:你不應該這樣做。

你不想要一個隨每次提交而變化的文件合併一場噩夢。

更好的選擇是:

  • 寫的版本字符串到一個文件上update
  • 用戶在編譯/部署腳本運行$(HG ID),並將它放入構建在那個時候

相信我,文件中的修訂字符串是CVS/SVN思想。它在git/Mercurial世界中沒有地位。

+0

我不同意,它的確如此。即使在SVN中,你也必須明確地通過一個屬性來啓用它。這與CVS完全不同,必須通過'cvs add -kb'或回購配置明確指出哪些文件是「二進制」的。 – 0xC0000022L

+1

CVS和svn都可以讓工作目錄中的某些文件在不同版本中籤出。我可以做'cvs co -r 1.1 a_specific_file',所以在cvs(和svn)中有一個「這個該死的東西是什麼版本」是合理的。在Mercurial和git中,你不能在一個版本中有一些文件,在另一個版本中不能有一些文件(並且仍然沒有任何提交/清除狀態),所以'hg id'總是足以知道_every_文件中的內容。只需讓您的構建/部署系統更智能一點,而不是污染源文件。 –

+0

如何將版本添加到更新的文件中?有沒有辦法使它自動化?我正在使用SourceTree。 – felwithe

1

是的,這是可能的,但你需要啓用它。你要求的基本上是keyword extension。首次啓用時請小心(請閱讀關於kwshrink,kwexpand的部分),因爲您不希望實際展開的關鍵字成爲修訂歷史記錄的一部分。

1

我最喜歡的方式是使用hgversioninfo plugin。 它在「hg commit」,「hg update」等文件上生成一個version.py文件。

相關問題