当前位置:  开发笔记 > 开发工具 > 正文

使用分布式版本控制时构建排序

如何解决《使用分布式版本控制时构建排序》经验,为你挑选了3个好方法。

现在,我们正在使用Perforce进行版本控制.它有一个方便的功能,我们可以用来引用构建的严格增加的更改号,例如"如果你的构建至少是44902,你将得到错误修复".

我想切换到使用分布式系统(可能是git),以便更容易分支和在家工作.(Perforce完全可以实现这两个目标,但是git工作流程有一些优势.)因此,尽管"支流开发"将被分发而不是参考通用的修订版,但我们仍然会维护一个主要的git repo,所有更改都会需要在创建构建之前加入.

保存严格增加的构建ID的最佳方法是什么?我能想到的最简单的方法是使用某种post-commit钩子,每当主repo更新时它就会触发,并且它注册(哈希)新树对象(或者提交对象?我是新手git)有一个集中的数据库,可以分发ID.(我说"数据库",但我可能会用git标签来做,只是寻找下一个可用的标签号或什么.所以"数据库"真的是.git/refs/tags/build-id /. )

这是可行的,但我想知道是否有更简单,或已经实现,或标准/"最佳实践"的方式来实现这一点.



1> squadette..:

可以生成与当前提交相对应的单调递增的数字

git log --pretty=oneline | wc -l

返回一个数字.您还可以将当前sha1附加到该数字,以添加唯一性.

这种方法优于git describe,因为它不需要您添加任何标记,它会自动处理合并.

它可能会遇到拐点问题,但无论如何都要进行"危险"操作.



2> Jörg W Mitta..:

我第二个使用的建议git describe.如果您有一个理智的版本控制策略,并且您没有对您的存储库做任何疯狂的事情,git describe将永远是单调的(至少像您一样单调,当您的修订历史是DAG而不是树)和唯一.

一点点演示:

git init
git commit --allow-empty -m'Commit One.'
git tag -a -m'Tag One.' 1.2.3
git describe    # => 1.2.3
git commit --allow-empty -m'Commit Two.'
git describe    # => 1.2.3-1-gaac161d
git commit --allow-empty -m'Commit Three.'
git describe    # => 1.2.3-2-g462715d
git tag -a -m'Tag Two.' 2.0.0
git describe    # => 2.0.0

输出git describe包含以下组件:

    您要求描述的提交中可以访问的最新标记

    提交和标记之间的提交数量(如果非零)

    提交的(缩写)id(如果#2非零)

#2是使输出单调的原因,#3是使其独特的原因.当提交标记时,省略#2和#3 ,git describe也适用于生产版本.



3> joegiralt..:
    git rev-list BRANCHNAME --count

这比资源密集程度低得多

    git log --pretty=oneline | wc -l

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有