Git 获取哈希而不提交

Git 获取哈希而不提交,git,Git,我需要跟踪应用程序创建的数据,以便数据旁边写有一个标识符,该标识符告诉编写它的软件的代码版本 为了让它在开发环境中也能工作,很明显,git提交不会在软件的每次实验性更改上进行,而是在更改后的软件已经创建了数据之后进行 那么,有没有一种方法可以在不提交的情况下获取代码的哈希值 挤压和重定基面看起来很有可能出现手动错误,因此似乎不够充分 在编译过程中,我可以将自己的散列作为一项任务,但使用git的好处是,.gitignore已经描述了所有需要排除在散列分解之外的内容;它非常安全地描述了项目的边界。此

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

为了让它在开发环境中也能工作,很明显,git提交不会在软件的每次实验性更改上进行,而是在更改后的软件已经创建了数据之后进行

那么,有没有一种方法可以在不提交的情况下获取代码的哈希值

挤压和重定基面看起来很有可能出现手动错误,因此似乎不够充分

在编译过程中,我可以将自己的散列作为一项任务,但使用git的好处是,
.gitignore
已经描述了所有需要排除在散列分解之外的内容;它非常安全地描述了项目的边界。此外,如果项目是在创建数据之后提交的,那么提交之前的git哈希在没有额外代码更改的情况下仍然有效

有没有一种有序的方法可以在没有提交的情况下获取项目的git哈希或类似有用的东西

那么,有没有一种方法可以在不提交的情况下获取代码的哈希值


不,因为提交时间是散列的一部分。

为此,我们使用git descripe--always--dirty。如果工作树包含未提交的更改,它将附加“-dirty”。如果当前提交有注释标记,则将使用该标记代替哈希


通常,我们的构建脚本(makefile)生成一个
version.h
,其中包含此信息。
version.h
位于
.gitignore
中,并且从未提交过。

正如Jonathan所指出的,您需要获得提交散列的时间等信息

但是,您始终可以这样做以获取示例提交哈希:

添加所有文件:
git添加。

作出承诺:
git提交

使用提交散列执行任何您想执行的簿记操作:

git rev-parse HEAD
将提交视为不存在,将其删除:

git reset --soft HEAD^

因此,您回到了
git add
之前的原始位置。这可能是最干净、最好的方法。现在还有一个近似的提交哈希。

当然。对于你已经上演的这一切

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"

Linux内核使用提交id对模块进行版本设置,如果工作树有未提交的更改,则会追加
-dirty
。根据你的需要,这可能就足够了。当然,对问题的措辞进行“或相当有用的东西”的精炼。。。任何类似于临时提交的东西,都可以在每次编译过程中自动作为任务应用,或者任何你想到的东西。好吧,如果你愿意做一个提交,那么就这样做,然后你就有一个提交ID。正如上面的评论所建议的,你可以在散列中附加一些东西来指示未提交的更改。这听起来太粗粒度了,但是等待上面关于如何使用
-dirty
的澄清。让我们看看还会发生什么。如果我以后在使用这个临时哈希写入数据后提交,以后是否有任何方法将与数据一起保存的spit hash与当时的源代码状态关联起来?奇怪的是,我修改了我的源代码,
write tree
仍然像以前一样吐出完全相同的哈希。看起来它没有将内容分解到散列中……如果是后期关联,是的,散列
git write tree
spits就是后期
git rev parse$commit^{tree}
显示的内容。散列代码没有什么临时性,它完全由数据决定,对于加密散列,它是绝对的,因为绝对是唯一的。如果没有显示更改:散列是当前索引的内容和结构,您必须
git添加它,它将数据库放入存储库并更新索引项以指向该数据库。git垃圾会定期收集数据库,而推送/获取的只是完成传输的历史记录所需的内容,因此从长远来看根本不需要担心。如果你这么频繁地这样做,以至于你在一个月左右的时间里积累的临时内容是你在其他事情上需要的进食量,有很多选择,我建议在单独的问题中详细说明情况。顺便说一句,你介意接受这个答案吗?现在这个页面有点误导人。谢谢,这个散列怎么是“近似值”?需要澄清吗?提交是近似的,因为它所提交的内容正是在此内容上进行的任何其他提交所提供的内容。我不知道提交散列中包含哪些因素,但我确信不可能复制它们。