title: Why does `git diff` not work with process substitution?
body: <p>Why does <code>git diff</code> not work with process substitution?</p>
  
  <pre><code>$ echo hallo &gt; hallo
  $ echo holla &gt; holla
  
  $ git diff hallo holla  # works
  
  $ git diff hallo &lt;(cat holla)  # works not
  
  diff --git a/hallo b/hallo
  deleted file mode 100644
  index 4cf5aa5..0000000
  --- a/hallo
  +++ /dev/null
  @@ -1 +0,0 @@
  -hallo
  diff --git a/dev/fd/63 b/dev/fd/63
  new file mode 120000
  index 0000000..864a6ca`
  </code></pre>
  
  <p>Same with <code>git diff --no-index</code>.</p>
  
  <p>It works with plain <code>diff</code>. <code>cat</code> is only a trivial example, can be replaced by a non-trivial <code>sed</code> expression.</p>
  
  <p>Workaround:</p>
  
  <pre><code>$ cat holla | git diff hallo -  # works
  </code></pre>
  
  <p>But it will not work if both arguments should be affected by process substitution, like described in many examples for diff and process substitution.</p>