在清洁之前git怎么可能知道SHA-1?

时间:2013-02-09 06:33:33

标签: git

git如何在应用clean过滤器之前知道提交的SHA-1?

下面的过滤器只会将Hello!打印到stderr

$ cat filter.sh
#!/bin/bash

echo "Hello!" >&2
cat

创建一个新的Git存储库,配置myfilter,阶段foo并提交更改:

$ git init
Initialized empty Git repository in /tmp/git/.git/
$
$ echo -e '[filter "myfilter"]\n\tclean = "./filter.sh"\n\tsmudge = "./filter.sh"' >>.git/config
$
$ cat .gitattributes
foo filter=myfilter
$
$ echo 1234 >foo
$
$ git add foo
Hello!
$
$ git commit -m "First commit"
[master (root-commit) 637d6c1] First commit
Hello!
 1 files changed, 1 insertions(+), 0 deletions(-)
  create mode 100644 foo

在运行637d6c1...过滤器之前,提交的SHA-1被称为clean。但是,clean过滤器可能会在提交之前更改foo的内容,对吧?所以git事先无法知道SHA-1。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

你被输出缓冲愚弄了。

在过滤器中的sleep 10之前或之后添加echo。你会看到在10s暂停之前git不会显示提交。