我正在尝试用git复制Subversion的$Id: $
功能。我知道我可以使用.gitattributes
来设置ident
属性,这将允许我将blobID嵌入到源代码注释中。这是基本要求,我也有保障。
但我正在努力想办法让ID在实际意义上有用。git log
和git blame
需要一个文件名,所以我不能将ID与它们一起使用。git show
只显示blob内容,但不提供任何提交链接。
我想要的是,给定一个blob ID,获得创建该blob的提交。(最终,获取文件的git log
或git blame
数据,或者能够检出包含该文件的修订版)。
我理解git这样的分布式系统中的提交历史比颠覆更复杂,但如果我能从任何方面入手,那就足够了。我真正需要的是能够证明,给定源代码,我可以追溯到版本控制历史。
git标记命令怎么样?检查此链接作为起点:
https://git-scm.com/book/en/v2/Git-Basics-Tagging
除了blob-id,gitattributes手册还描述了export-subst
过滤器,因此您可以打开它并使用$Format:%H$
添加提交哈希,或者使用$Format:%d$
包括分支/标记名称。您必须使用git archive
来释放这些文件。
例如:
$ cat .gitattributes
* export-subst ident
$ cat foo.c
// Blob hash: $Id$
// Commit hash: $Format:%H%d$
$ git archive master | tar -xO
* export-subst ident
// Blob hash: $Id: 9e0569a55a4eaacdf8d100a2c3d3654cf767650b $
// Commit hash: 3802b7884faf182ce0994ac9d94925dad375be05 (HEAD -> master, tag: v2)