用Git标记文件

用Git标记文件,git,continuous-integration,Git,Continuous Integration,在我的构建过程中,作为第一步,必须进行安全性分析。完成后,我想用一些标识符标记已传递的文件,这样当构建脚本运行时,它就可以简单地获取指定的标记版本 我可以看到如何标记回购协议,而不是单个文件。背景:在Git中,标记名可以指向任何对象类型。通常,它们将指向提交对象(与分支名称指向提交对象的方式相同)——这些对象称为轻量级标记或带注释的标记对象,这是一个存储库对象,反过来又指向另一个存储库对象(通常为提交)。指向注释标记对象的标记名称为注释标记 Git没有文件,但Git有blob。因此可以标记blo

在我的构建过程中,作为第一步,必须进行安全性分析。完成后,我想用一些标识符标记已传递的文件,这样当构建脚本运行时,它就可以简单地获取指定的标记版本


我可以看到如何标记回购协议,而不是单个文件。

背景:在Git中,标记名可以指向任何对象类型。通常,它们将指向提交对象(与分支名称指向提交对象的方式相同)——这些对象称为轻量级标记或带注释的标记对象,这是一个存储库对象,反过来又指向另一个存储库对象(通常为提交)。指向注释标记对象的标记名称为注释标记

Git没有文件,但Git有blob。因此可以标记blob对象。如果在任何提交中存在文件名,您将不知道该文件名在任何提交中可能包含的文件名,但您将能够提取该文件的数据:

git tag $name $hash
或:

其中,
$name
$hash
分别代表标记名和blob哈希ID

树对象将文件名(没有嵌入斜杠的名称)与blob哈希ID(以及模式信息)匹配,因此如果需要存储一对,可以使用虚拟模式(始终
100644
)创建树对象,使用该模式将名称与blob哈希ID配对,并将标记指向该树对象。但是,树对象更难创建:您需要使用
GIT\u index\u文件
GIT更新索引
创建临时索引。此方法还允许您存储包含嵌入斜杠的路径名,方法是将最后一对放在更高级别树的子树中:

GIT_INDEX_FILE=$(mktemp)
rm -f $GIT_INDEX_FILE
git update-index --cacheinfo 100644,$hash,$path || ... handle error ...
treehash=$(git write-tree) || ... handle error ...
git tag $annotated_opt $name $treehash || ... handle error ...
rm -f $GIT_INDEX_FILE
其中,
$annotated_opt
对于带注释的标记是
-a
,对于轻量级标记是空的


注意:要将一些任意内容添加为blob对象并获取其哈希ID,请使用
git hash object-w

blobhash=$(generate_data | git hash-object -w --stdin) || ... handle error ...
比如说

blobhash=$(generate_data | git hash-object -w --stdin) || ... handle error ...