2013-03-01 62 views
2

在我的構建系統中,每次運行一個新構建時,我都會將當前提交的修訂和散列信息保存在幾個變量中,並在我的源代碼中使用它們而沒有問題。例如,窗口標題被格式化爲「NAME-REVISION-HASH」。如何在沒有它的情況下嵌入DVCS修訂信息

這樣做的唯一問題是,有時候人們通過下載不包含提交信息的標準源來構建項目,因此修訂和散列全部爲0。

可以做些什麼來防止這種情況?添加一個單獨的文件,包含這種信息藐視使用分佈式版本控制系統的優勢,因爲它需要在每次提交時手動更新...

有沒有一種方法可以讓沒有dvcs的人獲得正確的修訂和散列信息?

+0

只是使克隆回購的方式來獲得來源。期望希望能夠構建項目的開發人員使用與您相同的版本控制系統是合理的。想想所有這些公共代碼託管網站的工作原理(谷歌代碼,github,bitbucket,Codeplex等)。 – 2013-03-01 00:22:09

+0

[從CVS轉移到git:$ Id:$ equivalent?]的可能重複(http://stackoverflow.com/questions/384108/moving-from-cvs-to-git-id-equivalent) – guerda 2013-03-12 10:20:25

回答

0

您可以使用git describe來獲取一個唯一的字符串,然後可以將其包含在您的構建中。 (git version這裏返回git version 1.8.2.rc1.19.g443d803,即,1.8.2-rc1 + 19提交,最近的提交具有SHA1 443d803e0dacd0a1c6700503689f3cd95751aba1; git describe返回v1.8.2-rc1-19-g443d803)。

從SCCS的日子來,擴大$Id:$和其他關鍵字結構的習慣,這在VCS剛剛處理單個文件的那些日子裏是非常有意義的;這是今天的退化(並且git根本不做任何「關鍵字擴展」)。

1

添加包含這類信息違抗使用分佈式版本控制系統

跆拳道的優勢一個單獨的文件? 「人們建立通過下載標準源的項目......」,因爲他們沒有任何VCS,多了一個文件「蔑視」沒什麼

,因爲它需要在每次手動更新提交

又是什麼?自動提交文件,特別準備的關鍵字(或文字常量)是不是一個很大的問題,至少對水銀

+0

是的,但該文件每次提交完成後都會發生變化,並會污染文件的提交列表和這些額外的信息... – koda 2013-03-01 11:13:00

+0

@koda - 是的,但它是公平的價格(IMNSHO):你不能得到「無所不能」。但我(個人)喜歡Ry4an的想法 – 2013-03-01 20:22:20

0

如果您正在使用水銀產生,它已經爲您處理檔案。該hg archive命令,該命令的權力網絡界面壓縮包/拉鍊自動下載包括.hg_archival.txt文件,它看起來像:

repo: 0339f7b37c3416248e4e0b183a481aa40ade150e 
node: 0339f7b37c3416248e4e0b183a481aa40ade150e 
branch: default 
latesttag: null 
latesttagdistance: 1 

所以,你的代碼可以使用的邏輯,對於當地的回購首先檢查,以獲得版本信息,如果這不在那裏然後尋找.hg_archival.txt文件。 latesttaglatesttagdistance特別方便,如果你標籤發佈。你可以用它們來建立一個版本字符串這對人類和DVCSs等是有用的:

2.0.1-5-40ade150e 

可能「因爲2.0.1版本40ade150e的散列5個提交」

+1

請注意 - 如果你想遵循「語義版本」(不是一個壞主意),「之後的變更集」必須用「+」分隔。 '2.0.1 + 5-40ade150e' – 2013-03-01 20:24:14

0

從讀作another question

現在,在$ Git中支持$ Id:$。要啓用該文件,請將「README ident」放入.gitattributes。支持文件名上的通配符。詳情請參閱man gitattributes

相關問題