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前または後にを追加します。echo10秒が一時停止する前に、コミットがgitによって表示されないことがわかります。

于 2013-02-09T06:43:48.583 に答える