单一代码库版本标签约定

46

在单体代码库(monorepo)中,使用版本标签(tag)有没有标准?类似于 1.0.0-myapp12.1.0-myapp2 这样的方式是否可接受?还是有其他区分应用程序版本的方法?


2
一个标签对应一个提交,而提交又对应整个代码库。因此,基于单个组件的名称来为mono-repo打标签并不清晰。 - Oliver Charlesworth
2
如果每个应用程序需要不同的版本,那就说明你需要为它们每个都建立一个仓库。我建议在该仓库中要么使用单一版本模式,要么将其拆分为每个应用程序的仓库。 - Gonzalo Matheu
3
谷歌使用单一仓库,他们必须独立为每个项目进行版本控制。 - markvgti
1个回答

62

tags被组织在目录和文件中(所有的git引用都是这样的,运行tree .git/refs/tags来查看),因此我建议给标签命名:

myapp1/1.0.0
myapp1/1.0.1
 ...
myapp2/2.1.0
myapp2/2.2.0
 ...

这将把每个应用程序的版本分组在一起,某些命令将“自然地”处理数字:
# list tags, sorted by version number :
$ git tag --list --sort="version:refname"
myapp1/1.0.2
myapp1/1.0.10
myapp1/2.0.0
myapp1/10.0.0
myapp2/1.0.0
myapp2/2.0.0
myapp2/11.0.0

如果你想避免在检查myapp1日志时出现“myapp2标签”,可以使用git log命令和--decorate-refs=<pattern>选项:
# this will include tags starting with 'myapp1', and all branches :
$ git log --oneline --graph --decorate-refs=refs/tags/myapp1 --decorate-refs=refs/heads

如果您需要经常使用这个功能,您可以为它添加一个别名:

$ git config alias.logmyapp1 log --decorate-...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接