2016-04-09 48 views
2

我想在每次成功構建後自動進行增加內部版本號的新提交。用於自動提交和增加內部版本號的腳本

我用這個未跟蹤,自修改腳本:

let N=`tail -n 1 $0`+1 
sed -i '' "5s/.*/$N/" $0 
echo $N 
exit 0 
0 

在每次調用它增加在最後一行數和呼應它,因爲我的makefile文件的一部分,我犯這樣的:

git commit -m "build `sh script.sh`" 

有沒有更好更優雅的解決方案呢?我的解決方案可能會出現哪些問題?

編輯:

感謝您的意見。我已經想到了這一點,並會看看建議的其他方法。

+1

它看起來像你使用這個,只要你想發佈「釋放」?當你想發佈的時候用'git tag'添加標籤怎麼樣?然後,簡單地在你的提交信息中包含標籤版本作爲發佈版本(這也可以通過腳本完成) – Bartek

+1

有趣的解決方案,我建議不要用硬編碼sed的行號,因爲它可能會覆蓋其中一個腳本行後來的修改。 'sed'$ s /.*/'"$ N「'/''會做。 – karakfa

+1

或者在每個構建中進行提交,但只更新構建成功的引用。然後你可以使用'git describe'輸出。在構建中。 – jthill

回答

2

最好將它保存在自己的文本文件中,讓腳本維護文件保持不變而不是改變它。

#!/bin/bash 

# Initialize build.txt if it doesn't exist 
if [[ ! -f build.txt ]]; then 
    echo 0 >> build.txt 
fi 
let build=$(cat build.txt)+1 
echo $build > build.txt 
echo $build 

不寫自我修改代碼的原因?這很難推理,看起來它自我修改的事實是阻止你檢查它。同樣根據我的經驗,一個錯誤可能會導致腳本被簡化爲一個空文件。 See also

這就是說,我認爲你應該利用像Jenkins這樣的東西來管理你的內部版本號。它不會使提交跟蹤成功的構建,但界面會顯示成功和失敗的構建。

我反對自動進行提交,當然在這種情況下,您的版本歷史將變得混亂,無法看到真正的變化。同樣,像詹金斯這樣的工具將會以更合適的方式向您提供這些信息,而這正是我期望找到的。

2

如果您爲您的版本添加標籤(無論如何,這是一個好主意),您只需使用git describe --tags即可生成內部版本號。

一個來自我自己的倉庫的例子;

> git describe --tags 
1.10-99-g6928bd0 

這意味着在標籤1.10之後,99次提交已完成。 HEAD的簡短提交ID是6928bd0

如果你不想要HEAD,你可以做類似的事情;

> git describe --tags | awk -F '-' 'BEGIN {OFS="-"} {print $1, $2}' 
1.10-99