2009-11-29 58 views
16

我將如何去模擬git主線中每次提交的全局增加版本號?使用git模擬全局修訂號

所以,我承諾後,我想腳本運行增加一個數字的地方。

這將允許我輕鬆告訴我的客戶X功能已在git修訂版XYZ中修復。

我正在尋找一個實用的示例腳本,它足夠健壯,可處理推送和合併到一定程度。

回答

27

git describe給你一個版本的描述如下所示:v2.0-64-g835c907v2.0部分是提交之前的最新批註標籤的名稱,64是之後的提交數量,835c907是縮寫的提交ID。它基本上是以確切和方便的(儘管技術上)方式來識別任何修訂。

注意:爲此,您至少需要一個帶註釋的標籤。要爲版本v2.0運行創建一個 - git tag -a v2.0,如果沒有帶註釋的標記,則此命令將失敗,除非給出像--tags--always這樣的回退參數。

+1

我想我會接受這個,它是git-way,並且長期來說足夠強大,可以處理多個開發場景......我可以隨時在網站2.0.64上顯示客戶,然後保留其餘的信息在某個地方的文件系統上,以便我可以跟蹤提交。 – 2009-11-29 23:19:50

6

我認爲你將版本號與版本號混淆在一起。

Subversion使用版本號,因爲它可以:它是一個集中的存儲庫。 Git當然有SHA-1哈希不是修訂版本號,因爲它沒有中央存儲庫(但你知道這一點)。

修訂編號(和技術上哈希在技術上是一個160位的數字,它只是不連續)不應該真的是你的客戶的關注。他們應該關心的是版本號。那時你打包你的源代碼並且說「這是2.3.4版本」,並附上發佈說明以說明發生了什麼變化。

理想情況下,這樣的清單是由問題跟蹤軟件生成的,您的源代碼只是標記爲哪個版本構成該版本號。

+2

除Git根本不使用128位GUID。 Git使用存儲的每個對象的160位SHA-1哈希值。 GUID是一個完全不同的野獸:http://en.wikipedia。org/wiki/GUID – Juliano 2009-11-29 22:59:29

+0

Oh woops,謝謝。固定。 – cletus 2009-11-29 23:16:09

9

可以在git中模擬修訂版本號,但重要的是要知道它不是一個完美匹配,也不是最容易追溯到的。我個人使用它來爲Web應用程序製作更簡單的修訂版本號,因爲我是唯一的開發人員。我在我的.bashrc中使用以下函數來獲取我隨後用於發行說明的修訂版本號(但是,如果您尚未強烈建議對發行版進行標記 - 那麼該號碼僅適用於用戶)。如果這些限制衆所周知,它會給出一個更人性化的修訂版本號。

function rgit() { 
    git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}' 
} 
+0

這真是太棒了,我有一個完全相同的問題,一個真正快速移動的網絡應用程序的單一開發。我明白,如果我開始重寫歷史,但接受這個限制,這可能會變成梨形。 – 2009-11-29 23:01:57

+1

自從您將'-l'選項傳遞給'wc'後,'awk'部分就沒用了。 – 2012-08-20 12:56:58

1

我一直在使用下面的腳本(即不知道git describe):

#!/bin/bash 

FULL_BRANCH=`git branch | grep '*'` 
BRANCH_NAME=${FULL_BRANCH:2} 
REV=`git rev-parse --short HEAD` 

$COMMIT_NAME = $BRANCH_NAME-$REV 

這給你一個包含當前分支名稱的名稱,然後是短提交ID。例如:master-c03f862

這是足以做你以後的事情,但也許git describe是去這裏的正確方法。