2009-12-05 72 views
3

我們將Git與中央服務器一起使用,我們的代碼需要在文件中包含版本號。這是目前實現的方法是這樣的:使用中央工作流程的Git版本編號

  1. 一個新的開發做了「混帳克隆」
  2. 在他的本地副本,他編輯的.git /掛鉤/預提交到version.sh叫

version.sh(包含在項目根目錄中)從「git describe」獲取版本號並將其存儲在文件中。

雖然這個工作,我想確保版本號更新,即使開發人員忘記編輯他的預先提交鉤子。

由於服務器沒有工作副本,只需調用(pre | post) - 接收鉤子不起作用,所以我想知道是否有辦法做到這一點。

+0

如果你能夠告訴我們,爲什麼你需要在該文件的版本號,我們也許能夠幫助你解決實際問題,以及(我想,你需要它的一部分二進制?爲什麼不把它從git-store中取出並設置爲宏?) – falstro 2009-12-05 16:41:21

+0

它應該在二進制文件中 - 所以是的,如果我們有一個構建過程,我們可以在那裏進行編號。但是,我不會太樂意發佈與我們的存儲庫不同的東西。 (目前,我們只是創建一個工作樹的存檔 - 沒有構建過程。) – knipknap 2009-12-05 16:56:37

回答

4

如何在中央回購即拒絕提交無需改動版本的文件(在下面的例子中名爲VERSION)一hooks/update

#! /bin/bash 

refname="$1" 
oldrev="$2" 
newrev="$3" 

if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then 
    echo "Usage: $0 <ref> <oldrev> <newrev>" >&2 
    exit 1 
fi 

if [ "$refname" != "refs/heads/master" ]; then 
    exit 0 
fi 

if diff -bq <(git show $oldrev:VERSION) \ 
      <(git show $newrev:VERSION) >/dev/null 
then 
    echo "$0: VERSION unchanged; rejecting update" >&2 
    exit 1 
fi