我们想要运行git filter-branch
一个大型代码库来重新格式化 PHP 文件。由于我们有超过 21k 次提交phpcbf
,因此希望在每次提交filter-branch
. 是否可以只获取每次提交更改的文件并专门格式化它们?就像是...
git filter-branch --tree-filter \
'FILES=$(<something> | grep .php) php /usr/local/bin/phpcbf.phar $FILES || true'
我找到了解决方案:
git filter-branch --tree-filter 'phpcbf $(\
git show $GIT_COMMIT --name-status | egrep ^[AM] |\
grep .php | cut -f2)' -- --all
只是为了快速概述它在做什么:
git show $GIT_COMMIT --name-status
将返回该提交的所有修改文件。egrep ^[AM]
将雕像过滤到仅添加和修改。无需尝试格式化正在删除的文件。grep .php
仅格式化 PHP 文件。cut -f2
从列表中删除状态前缀,因此我们只获取原始文件路径。有关更多详细信息,请参阅我的博客文章:https ://elliot.land/post/reformatting-your-codebase-with-git-filter-branch