繁体   English   中英

使用git控制语义版本控制

[英]Using git to control semantic versioning

在git中,我想“标记”某些提交。 例如,我想“标记”那些破坏了软件的REST API的提交,这样我就可以记得修改主要版本号。 (我使用语义版本控制 )。

理想情况下,我应该能够发出git命令来查看自上一个发行版/标记以来是否有任何提交包含“标记”,因为那样我便知道下一个版本号。 应该撞大号。

由于标记是唯一的,因此“标记”不是标记(以git术语表示)。 我预计自上次发布以来可能会有几个相同的“标记”,以表示API已损坏。

当前的解决方法是在提交消息中写入“ MAJOR:”或“ MINOR:”。

关于如何使用git有什么建议吗?

确实,标记名称必须是唯一的—但是,有无限多个1的独特标记名称 mark/ 开头 ,例如mark/1mark/2等。 或者,您可以使用不在refs/tags/参考名称; 或者,您也可以使用Git的“注释”,尽管更容易检测标签或其他引用是一次提交的祖先还是另一次提交的后代:

highmark=$(git for-each-ref --format='%(refname)' refs/marks | wc -l)
nextmark=$((highmark + 1)
git update-ref refs/marks/m$nextmark HEAD

(这假设您绝不会使用git update-ref -d删除任何这些标记-如果您执行“高标记”计算,则必须找到现有的最高数字,而不是简单地计数)。 要测试标记$ N是否在标签T1和HEAD之间:

if git merge-base --is-ancestor T1 refs/marks/m$N &&
   git merge-base --is-ancestor refs/marks/m$N HEAD; then
       ... mark N is at or beyond tag T1 and at or before HEAD ...
else
       ... mark N is not between those two points (inclusive) ...
fi

或者,您可以将其存储在资源库中或内部,如果在资源库内部,则可以将其存储在普通的Blob中(Blob是Git原始文件数据的内部格式),该文件仅包含所有“已标记”提交的哈希ID。 文件本身可以存储在带标记或其他引用的提交中,该提交可以但不必位于任何分支上。 或者您可以标记Blob本身。 例如:

git show marks > /tmp/all-marks      # extract existing marks
git rev-parse HEAD >> /tmp/all-marks # add a new mark
git tag -f marks $(git hash-object -w --stdin < /tmp/all-marks)

如果将Blob存储在提交下,则可以通过为每个新的更新的“标记ID”文件进行新提交来保留标记的历史记录。 这在某些方面类似于git notes工作方式,但是您无需编写名称为提交ID的文件,而只是编写一个名为“ marks”的文件(通过树存储,然后由提交指向该树) ,即标记参考-是像上面的标记示例中那样的refs/tags/marks之类的标记,还是上面的m系列参考中类似refs/marks参考,但仅使用一个参考)。 由于每个提交都有一个父指针,因此您可以保存上一个提交,保存上一个树,保存上一个blob / marks-file,甚至可以对这些提交运行git log ,以查看何时更新了这些标记等


1是有限的,但仅受磁盘空间和名称模式的限制。 此处提出的模式,在单个名称空间中的文件名中以小数点计数,在典型的Unix-ish文件系统上只能计数到10 254 ,其组件名称长度限制为255字节。 实际上,在将名称分层之前,您可能不希望超过一千个左右,例如,一旦进入几百万个带标记的提交,便是refs/marks/123/456/789 123/456/789。

操作系统还强加了最大路径长度,但是您在提交ID之前就已经用光了:2 160仅是1 461 501 637 330 902 918 203 684 832 716 283 019 655 932 542 976,即约1.462 sexdecillion 规模术语。 更糟糕的是,无论如何,在经过五百亿个对象之后,发生哈希冲突的机会变得很高,因此我们只需要数10 18即可

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM