p less than you&#8217;d expect: if
git-filter-branch itself were not shell, then the convenience
functions (map(), skip_commit(), etc) and the <code>--setup</code> argument
could no longer be executed once at the beginning of the program
but would instead need to be prepended to every user filter (and
thus re-executed with every commit).</p>
</li>
</ul>
</div>
</li>
</ul>
</div>
<div class="paragraph">
<p>The <a href="https://github.com/newren/git-filter-repo/">git filter-repo</a> tool is
an alternative to 