Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何管理Git中的版本号?_Git_Version Control_Versioning - Fatal编程技术网

如何管理Git中的版本号?

如何管理Git中的版本号?,git,version-control,versioning,Git,Version Control,Versioning,让我们想象一下,命令行工具是在上维护的。此工具具有(隐藏)--version选项,该选项返回其(比方说0.1.2)和另一个--commit,该选项返回构建它的提交编号 版本和提交编号都在代码库中硬编码 现在我做了一个错误修复,然后提交并重建我的程序。我仍然会看到0.1.2,尽管这个新版本与原来的0.1.2有所不同。只有提交会告诉我它与0.1.2不同。那个错误修正值不同的版本号吗 一种解决方案是,每次提交时,我都会增加硬编码版本号(这意味着每次提交至少修改2个文件)。这是一个绑定解决方案,当开发人

让我们想象一下,命令行工具是在上维护的。此工具具有(隐藏)
--version
选项,该选项返回其(比方说
0.1.2
)和另一个
--commit
,该选项返回构建它的提交编号

版本和提交编号都在代码库中硬编码

现在我做了一个错误修复,然后提交并重建我的程序。我仍然会看到
0.1.2
,尽管这个新版本与原来的0.1.2有所不同。只有提交会告诉我它与0.1.2不同。那个错误修正值不同的版本号吗

一种解决方案是,每次提交时,我都会增加硬编码版本号(这意味着每次提交至少修改2个文件)。这是一个绑定解决方案,当开发人员在不同的活动分支上工作时,它不起作用。如果Bob在版本
0.1.2
的功能
foo
上工作,Alice在同一版本的功能
bar
上工作。他们如何增加版本号?鲍勃可以用奇数,爱丽丝可以用偶数。如果Eve在制作第三部电影呢

另一种解决方案是使用Git标记自动生成版本号。脚本可以找到以
v
开头的最近的标记,例如
v0.1.2
,并使用标记名作为版本号加上当前提交的前n位(
v0.1.2(build 4acd21)
)。如果工作目录是干净的,那么这种方法很有效。可以想象在构建编号之前添加一个
*
,以指示工作目录不干净。此解决方案的主要问题是,如果有人导出源代码,它将无法构建blerp


有什么可能的替代方案可以解决这个问题?

正如您所说,版本控制问题通常在git中使用
分支
标记
(类似模式)来解决

更好的方法是使用
git
只跟踪代码库中的更改,忽略(使用文件)构建文件并维护干净的存储库

生成结果(预编译文件、可执行文件、分发文件、ZIP、exe…)可能取决于环境变量(平台、系统架构等),应在注册表中单独保存


如果代码库非常大并且很难维护,也许您应该考虑将其划分为更小的组件(或),以避免开发时的交叉依赖。

修订号应由您维护,而不是由git维护。与SVN不同的是,每次提交时,您的版本号不会增加,git没有现成的方法来上下文化您的版本。

请查看命令。此命令显示最新标记以及设置标记后的提交量。还可以显示存储库的肮脏程度


正如您提到的,如果没有安装git存储库(.git文件夹)和git,该命令将无法工作。但是,今天的开发者如果没有git,却安装了所有其他工具,这几乎是不可想象的。

Alexey Kiselev和Dario已经暗示了答案,但我将尝试详细解释它

版本控制方案 有两种类型的版本控制方案:

  • 内部版本号:可在一天内增加多次(如修订控制号)
  • 已发布版本:更改频率较低(例如语义版本控制)
  • 人们根据自己的需要使用,但使用相当广泛,作者是GitHub联合创始人汤姆·普雷斯顿·沃纳(Tom Preston Werner)

    语义版本控制 语义版本控制遵循
    X.Y.Z

    或者更可读的将是
    [major].[minor].[patch]-[build/beta/rc]

    例如
    1.2.0-beta版

    如果软件中有重大更改,例如向后不兼容的API版本,则可以增加
    major或X

    如果引入了向后兼容的API,
    minor或Y
    将递增

    补丁或Z
    在错误修复后递增

    我们如何使用Git实现这一点? 通过使用标记:

    Git中的标记可用于添加版本号

    git tag -a "v1.5.0-beta" -m "version v1.5.0-beta"
    
    将v1.5.0-beta版本标记添加到当前Git存储库中。在此之后的每个新提交都将通过添加提交编号和提交哈希自动递增标记。这可以使用git descripe命令查看

    v1.5.0-beta-1-g0c4f33f
    这里
    -1-
    是提交编号,
    0c4f33f
    是提交哈希的缩写。
    g
    前缀代表
    “git”

    可通过以下方式查看完整的详细信息:

    git show v1.5.0-beta版

  • 在project dir(或您想要的位置)中创建文件build_number,并将其值1放入该文件中

  • 转到git dir并在.git/hooks/(不带.sample)中创建名为“pre-commit”的文件

  • 把这个代码放在那里

  • #!/垃圾箱/垃圾箱

    currentbuildnumber=
    cat build\u number
    let“currentbuildnumber++” printf$currentbuildnumber>build_number currentbranch=
    git branch | tr-cd“[:alpha:”
    git log$currentbranch--pretty=格式:“%h-%an, %应收账款:%s,内部版本:$currentbuildnumber“

    为我工作:)
    享受吧

    通常,应该避免将版本放入源文件中。理想情况下,您应该有一个将版本编码到构建编号中的构建过程。这样,版本就独立于用于构建它的源代码。然后,该过程还可以在某个地方对提交id进行编码,这样您就可以始终知道构建源代码的依据。至于存储版本号,常用的解决方案是使用标签。这还使您可以通过查看标记轻松地在存储库中按版本浏览。如果您只是从SCM中获取了源代码,那么如何在产品中获取版本号。blerp的版本是什么?通常,你发布的东西