我將如何去模擬git主線中每次提交的全局增加版本號?使用git模擬全局修訂號
所以,我承諾後,我想腳本運行增加一個數字的地方。
這將允許我輕鬆告訴我的客戶X功能已在git修訂版XYZ中修復。
我正在尋找一個實用的示例腳本,它足夠健壯,可處理推送和合併到一定程度。
我將如何去模擬git主線中每次提交的全局增加版本號?使用git模擬全局修訂號
所以,我承諾後,我想腳本運行增加一個數字的地方。
這將允許我輕鬆告訴我的客戶X功能已在git修訂版XYZ中修復。
我正在尋找一個實用的示例腳本,它足夠健壯,可處理推送和合併到一定程度。
git describe
給你一個版本的描述如下所示:v2.0-64-g835c907
。 v2.0
部分是提交之前的最新批註標籤的名稱,64
是之後的提交數量,835c907
是縮寫的提交ID。它基本上是以確切和方便的(儘管技術上)方式來識別任何修訂。
注意:爲此,您至少需要一個帶註釋的標籤。要爲版本v2.0運行創建一個 - git tag -a v2.0
,如果沒有帶註釋的標記,則此命令將失敗,除非給出像--tags
或--always
這樣的回退參數。
我認爲你將版本號與版本號混淆在一起。
Subversion使用版本號,因爲它可以:它是一個集中的存儲庫。 Git當然有SHA-1哈希不是修訂版本號,因爲它沒有中央存儲庫(但你知道這一點)。
修訂編號(和技術上哈希在技術上是一個160位的數字,它只是不連續)不應該真的是你的客戶的關注。他們應該關心的是版本號。那時你打包你的源代碼並且說「這是2.3.4版本」,並附上發佈說明以說明發生了什麼變化。
理想情況下,這樣的清單是由問題跟蹤軟件生成的,您的源代碼只是標記爲哪個版本構成該版本號。
可以在git中模擬修訂版本號,但重要的是要知道它不是一個完美匹配,也不是最容易追溯到的。我個人使用它來爲Web應用程序製作更簡單的修訂版本號,因爲我是唯一的開發人員。我在我的.bashrc
中使用以下函數來獲取我隨後用於發行說明的修訂版本號(但是,如果您尚未強烈建議對發行版進行標記 - 那麼該號碼僅適用於用戶)。如果這些限制衆所周知,它會給出一個更人性化的修訂版本號。
function rgit() {
git rev-list --abbrev-commit HEAD | wc -l | awk '{print $1}'
}
這真是太棒了,我有一個完全相同的問題,一個真正快速移動的網絡應用程序的單一開發。我明白,如果我開始重寫歷史,但接受這個限制,這可能會變成梨形。 – 2009-11-29 23:01:57
自從您將'-l'選項傳遞給'wc'後,'awk'部分就沒用了。 – 2012-08-20 12:56:58
我一直在使用下面的腳本(即不知道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
是去這裏的正確方法。
我想我會接受這個,它是git-way,並且長期來說足夠強大,可以處理多個開發場景......我可以隨時在網站2.0.64上顯示客戶,然後保留其餘的信息在某個地方的文件系統上,以便我可以跟蹤提交。 – 2009-11-29 23:19:50