【问题标题】:Does Git track Versions?Git 是否跟踪版本?
【发布时间】:2011-01-22 22:02:32
【问题描述】:

我是一名 Git 新手,拥有 UNIX SCCS 和 Microsoft Visual SourceSafe 经验。

在SCCS中,每个文件都有一个版本(I%),由Release(%R)、Level(L%)、Branch(%B)、Sequence(S%)组成。 %I 等于 R%.%L.B%.%S,好吗?这些被称为 ID 关键字。

目的是您在签入之前将这些 ID 关键字插入源代码中,然后当您将它们签出为只读(而不是更改)时,它会将它们转换为它们的版本号。例如:

printf(“版本 s\n”, “%I”);

...会变成,

printf(“版本 %s\n”, “1.4.6.2”);

哪个会打印,

版本 1.4.6.2

SCCS 逐个文件跟踪版本,并在每次签入时递增。

在 Git 中有没有类似的东西?

【问题讨论】:

    标签: git version tags keyword version-control


    【解决方案1】:

    正如 SO 问题“To put the prefix ? to codes by Git/Svn”中所讨论的,Git 没有 RCS 关键字扩展。

    最接近的 Git 命令是 git describe,以获得某种提交参考。

    但混合元数据通常不是一个好主意(即数据“版本ID”关于数据“文件”)带有数据(文件)。
    如果你真的需要这类信息,一个单独的特殊文件列出你的其他常规文件,以及它们的相关版本 ID 更实用。

    即使是在每个文件分支和顺序方面与 SCS 具有相似概念的 ClearCase,也没有嵌入式版本号:请参阅 Embedded Version Numbers - Good or Evil?

    【讨论】:

    • 我同意您不应该将版本号注入源代码,然后将其存储在版本控制中。版本号应在构建时确定 - 可能替换源代码中的标记或使用属性文件。
    【解决方案2】:

    您可以使用git-describe 生成唯一的标签名称。

    该命令查找可从提交中访问的最新标记。如果标签指向提交,则只显示标签。否则,它会在标记名称的后缀加上标记对象顶部的附加提交次数和最近提交的缩写对象名称。

    如何使用“git describe”(from here) 确定软件版本号的示例:

    01  git commit -m'Commit One.'
    02  git tag -a -m'Tag One.' 1.2.3
    03  git describe    # => 1.2.3
    04  git commit -m'Commit Two.'
    05  git describe    # => 1.2.3-1-gaac161d
    06  git commit -m'Commit Three.'
    07  git describe    # => 1.2.3-2-g462715d
    08  git tag -a -m'Tag Two.' 2.0.0
    09  git describe    # => 2.0.0
    

    【讨论】:

    • 我从来没有标记原始提交。换句话说,我得到了别人的旧代码,更新它以使用最新版本的编译器,然后发现了 Git。我有两个提交:原始代码和我的更改。我猜原版会是主人,对吧?那么,我该如何标记主人呢? (其实他不是高手……他的代码真的很烂……哈哈。)
    • master 是一个分支,所以除非你创建了一个新的分支,否则你的提交都会在它上面。
    猜你喜欢
    • 2017-03-15
    • 2015-06-07
    • 2013-05-25
    • 2015-10-03
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多