计算所有*未提交*代码的git哈希值

时间:2014-05-22 20:19:04

标签: git

有一个很好的方法来获得一个如下工作的git哈希:

  1. 如果没有未提交的更改,请返回当前分支提示的git哈希(忽略未跟踪的文件),或
  2. 如果至少有一个未经更改的更改(无论是否在暂存区域中,但忽略未跟踪的文件),请计算如果运行git commit -a -m ''会导致的git哈希?
  3. 背景:

    我正在编写一些打包构建的开发工具。我希望构建包包含某种合理强大且完全自动的版本ID。对我来说,git SHA1哈希就足够了。不幸的是,仅仅使用git rev-parse HEAD是不够的,因为用户通常会在提交之前运行构建,因此在HEAD更新之前。

2 个答案:

答案 0 :(得分:4)

我认为你想要一个Git树对象的哈希,而不是提交的哈希。提交哈希值取决于提交时间,每次计算时都会有所不同。

要从工作副本创建新的树对象,您可以运行write-tree命令:

git add -u && git write-tree && git reset

请注意,这会弄乱你的索引(因为它会临时暂停所有更改)

答案 1 :(得分:1)

创建一个临时索引,向其中写入未提交的更改,然后获取该树的sha。

cp .git/index /tmp/git_index
export GIT_INDEX_FILE=/tmp/git_index
git add -u
git write-tree

这将打印出一个对git repo当前状态唯一的sha,包括未提交的更改,但不包括新文件。