1

在应用过滤器之前怎么git可能知道提交的 SHA-1 ?clean

下面的过滤器只打印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

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

4

1 回答 1

0

你被输出缓冲愚弄了。

在过滤器中添加sleep 10之前或之后。echo您会看到 git 在 10 秒暂停之前未显示提交。

于 2013-02-09T06:43:48.583 回答