我需要跟踪应用程序创建的数据,以便数据旁边写有标识符,告诉编写它的软件的代码版本。
为了使其在开发环境中也能正常工作,很明显,对软件的每次实验性更改都不会进行git提交,而是在已经由更改的软件创建数据之后 >。
那么有没有一种方法来获取代码的哈希值而不提交?
压扁和变基as mentioned here似乎有很多手动错误的可能性,因此看起来不合适。
我可以在编译期间将自己的哈希作为一项任务,但使用git的好处是.gitignore
已经描述了所有需要排除的因素,可以分解为任何类型的哈希;它非常安全地描述了项目的边界。除此之外,如果在创建数据之后提交项目,那么在提交之前的git哈希仍将在没有进行其他代码更改的情况下工作。
在没有提交的情况下,是否有一种有序的方式来获取项目的git哈希或类似的东西?
答案 0 :(得分:2)
那么有没有一种方法来获取代码的哈希值而不提交?
不,因为提交的时间是哈希的一部分。
答案 1 :(得分:2)
我们为此目的使用git describe --always --dirty
。如果工作树包含未提交的更改,它将附加" -dirty"。如果当前提交具有将使用注释标记而不是哈希。
通常,我们的构建脚本(Makefile)会生成一个version.h
,其中包含此信息。 version.h
位于.gitignore
且永不提交。
答案 2 :(得分:1)
正如Jonathan指出的那样,你需要获得提交哈希的时间信息。
但是,您可以始终执行此操作以获取示例提交哈希:
添加所有文件:
git add .
提交:
git commit
做任何你想用提交哈希做的簿记工作:
git rev-parse HEAD
摆脱提交,好像它从未存在过:
git reset --soft HEAD^
所以你回到git add
之前的原始位置。这可能是最干净,最好的方法。而且你现在也有一个近似的提交哈希。
答案 3 :(得分:1)
不确定。你上演了什么
git write-tree
它会释放当前索引的内容和结构的哈希值,根本没有时间戳或消息依赖性。
对于已经提交的树,它是
git rev-parse $commit^{tree}
编辑:要直接从树ID中检索状态,请执行
git read-tree -um HEAD $treeid
您可以使用
搜索该内容的提交git log --all --pretty=format:"%T Commit %H %d %S" \
| grep "^$treeid"