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。我在这里缺少什么?
答案 0 :(得分:0)
你被输出缓冲愚弄了。
在过滤器中的sleep 10
之前或之后添加echo
。你会看到在10s暂停之前git不会显示提交。