得到哈希而不提交

时间:2015-04-09 00:54:32

标签: git

我需要跟踪应用程序创建的数据,以便数据旁边写有标识符,告诉编写它的软件的代码版本。

为了使其在开发环境中也能正常工作,很明显,对软件的每次实验性更改都不会进行git提交,而是在已经由更改的软件创建数据之后 >。

那么有没有一种方法来获取代码的哈希值而不提交?

压扁和变基as mentioned here似乎有很多手动错误的可能性,因此看起来不合适。

我可以在编译期间将自己的哈希作为一项任务,但使用git的好处是.gitignore已经描述了所有需要排除的因素,可以分解为任何类型的哈希;它非常安全地描述了项目的边界。除此之外,如果在创建数据之后提交项目,那么在提交之前的git哈希仍将在没有进行其他代码更改的情况下工作。

在没有提交的情况下,是否有一种有序的方式来获取项目的git哈希或类似的东西?

4 个答案:

答案 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"