now*_*wox 25 versioning git version-control
让我们假设在git上维护blerp命令行工具.这个工具有(隐藏)选项,它返回它的版本(让我们说),另一个返回它的构建提交号.--version
0.1.2
--commit
版本号和提交号都在代码库上进行了硬编码.
现在我制作一个错误修正,然后提交并重建我的程序.我仍然会看到0.1.2
这个新版本与原版0.1.2不同.只有提交会告诉我它不一样0.1.2.这个bugfix值得一个不同的版本号吗?
一种解决方案是每次提交时,我都会增加硬编码版本号(这意味着每次提交时总是修改最少2个文件).这是一个绑定解决方案,当开发人员处理不同的活动分支时,它不起作用.如果Bob foo
使用该版本的功能,0.1.2
而Alice bar
则使用相同版本的功能.他们如何增加版本号?Bob可以使用奇数和Alice使用偶数.如果Eve在第三个功能上工作怎么办?
另一种解决方案是使用Git标签自动生成版本号.脚本可以找到以v
此类开头的最接近的标记,v0.1.2
并使用标记名称作为版本号加上当前commit(v0.1.2 (build 4acd21)
)的前n位数.如果工作目录是干净的,这很有效.可以想象*
在构建号之前添加一个表示工作目录不干净.这个解决方案的主要问题是如果有人导出源,它将无法构建blerp.
有哪些替代方案可以解决这个问题?
小智 48
Alexey Kiselev和Dario已经暗示了答案,但我会尝试详细解释.
版本控制方案有两种类型:
人们根据需要使用不同的方案,但语义版本控制被相当广泛使用,并由GitHub的共同创始人Tom Preston-Werner撰写.
语义版本控制遵循模式 X.Y.Z
或者更具可读性 [major].[minor].[patch]-[build/beta/rc]
例如 1.2.0-beta
major or X
如果软件发生重大变化(例如向后不兼容的API发布),则可以递增.
minor or Y
如果引入了向后兼容的API,则递增.
patch or Z
错误修复后增加.
通过使用标签:
Git中的标签可用于添加版本号.
git tag -a "v1.5.0-beta" -m "version v1.5.0-beta"
Run Code Online (Sandbox Code Playgroud)
将v1.5.0-beta的版本标记添加到当前的Git存储库中.此后的每个新提交都会通过在此标记中附加提交编号和提交哈希来自动增加.这可以是使用该git describe
命令的视图.
v1.5.0-beta-1-g0c4f33f
这-1-
是提交号和0c4f33f
commit的哈希的缩写.该g
前缀代表"git"
.
可以使用以下方式查看完整的详
git show v1.0.5-beta
Ale*_*lev 17
请看一下git describe命令.此命令显示标记设置后的最新标记和提交量.它还可以显示存储库的肮脏.
正如您所提到的,如果没有安装git存储库(.git文件夹)和git,此命令将无法正常工作.但是,如今没有git,但安装了所有其他工具,这几乎是不可想象的开发人员.
修订号应该由你维护,而不是由 git 维护。与 SVN 不同的是,每次提交时您都没有递增的修订号,因此 git 无法开箱即用地将您的版本置于上下文中。
小智 5
在项目目录(或您想要的位置)中创建文件 build_number 并将值 1 放入该文件中
转到 git dir 并在 .git/hooks/ 中创建名为“pre-commit”的文件(不含 .sample)
把这段代码放在那里
#!/bin/sh
currentbuildnumber=`cat build_number`
let "currentbuildnumber++"
printf $currentbuildnumber > build_number
currentbranch=`git branch | tr -cd "[:alpha:]"`
git log $currentbranch --pretty=format:"%h - %an, %ar : %s, Build: $currentbuildnumber"
Run Code Online (Sandbox Code Playgroud)
为我工作:) 享受吧!
归档时间: |
|
查看次数: |
40633 次 |
最近记录: |